Spring 6【什么是Spring 6、Spring框架介绍 、Spring IoC/DI 详解 】(一)-全面详解(学习总结---从入门到深化)

news2024/11/14 18:12:57

 

目录

一、Spring 6

二、Spring框架介绍 

三、Spring IoC/DI 详解 


一、Spring 6

1. 为什么要学习Spring 6

Spring 作为 Java程序员必会武功,无论是Spring的哪个版本,至少需要会一版本。再此基础上不会一套 组合拳SSM或SSH,出门都不好意思说自己是Java程序员。如果真不会,别人问你是做什么工作的,你就告诉他们,你是修电脑的。

10年前使用的是SSH(Spring + Struts + Hibernate),后来变为SSI(Spring + Struts/Spring MVC + iBatis) ,再到后来的SSM(Spring + Spring MVC + MyBatis) ,我们发现任随其他技术新老更替,Spring 稳坐钓鱼台。这么多年了,Spring 在Java 领域完全是老大哥的地位,所以才能衍生出其他的顶级项目, 形成Spring家族,也就是我们平时所说的Spring 全家桶。

其中一个原因是:既然我们怎么都要学习Spring,为什么不学习最新版的Spring 6呢?就像买手机,有 iPhone 30S 一米长的屏幕,谁又还会选择买iPhone 5 呢,毕竟这一米长的手机不仅仅是手机,还是防身武器。买两个还能组成双节棍。 

另一个原因:Spring 5 最低支持JDK 8,而Spring 6最低支持JDK 17,直接把JDK9~16全跳过去了(Spring 5支持JDK 8,9)。JDK 17也是Java 目前最新的一个长期支持版。可想而知在Spring 6会把JDK 17的特性 体现的淋淋尽致。 还有一个原因:同时Spring产品一直紧跟,甚至引领Java 行业潮流发展方向。通过学习最新的Spring 6 可以洞悉出Java未来的趋势。这点还是非常重要的。

2.环境准备 

3.前置技术 

Spring 虽然是Java程序员找工作的基础必备技能。但毕竟是一个框架,在原生Java基础上的封装。所以 里面会涉及到如下知识点

二、Spring框架介绍 

1.Spring 团队及公司

我们本套课程所学的Spring框架它归属于Spring 团队。没错框架名和团队名是一样的。 首先,必须强调的一点是Spring团队并不是一个公司名,而是一个team(团队)名称,这个团队归属于 Pivotal公司。小伙伴们可能惊呆了,Java程序员必会的Spring框架只是Pivotal公司下Spring团队的一个 产品而已。可想而知,Pivotal公司是一个多么强大的公司。如果还是感受不到Pivotal公司的强大,我国 网上购票系统12306熟悉吧,12306里面就用着Pivotal公司的产品。

Pivotal公司的一些著名产品:

Pivotal公司(美国毕威拓)是主做云原生平台的。成立于2013年4月,由EMC(美国信息存储资讯科技 公司,主要业务为信息存储及管理产品、服务和解决方案。)、VMware(虚拟化的鼻祖,我们平常用 的虚拟机软件)和GE(美国通用电气公司,世界上最大的提供技术和服务业务的跨国公司)投资成立。

EMC、VMWare、Spring之间有着一大段相爱相杀的故事,中间还有第三者戴尔公司插足的情况,如果 细说起来可以拍一个《甄嬛传》了。比较重要的时间线如下:

2020年1月3日,VMware宣布完成对Pivotal的收购,至此Pivotal成为VMWare的全资子公司。交易价格 约27亿美元。按照现在的汇率计算,大约188个小目标。收购完成后Spring框架的Logo也进行了改变。 从图片可以看到Spring By Pivotal变成了Spring by VMware Tanzu。其中VMWare Tanzu是戴尔科技旗 下VMware最新推出的云原生系列产品家族名称。

2.Spring框架介绍 

Spring框架英文全称Spring Framework,是由Spring团队研发的模块化、轻量级开源框架。其主要目的 是为了简化项目开发。在项目开发中,可以说没有刻意使用Spring,却处处有着Spring存在。用官网对 Spring框架的介绍:Spring框架核心功能包含依赖注入、事务管理、Web应用、数据访问、消息发送等 等。

曾经在网上流行过一个段子: 两个Java程序员对话,名字分别叫做A和B。

A:你用过Spring框架吗?

B:还用说,Java程序员谁没用过Spring框架!(带着不屑的表情)

A:那你知道Spring Framework吧?

B:Spring Framework?那不知道! 

Spring Framework前身是interface21,由Rod Johnson于2002年研发,主要是为了不使用EJB下依然能 够构建高质量Java EE项目。EJB是当年横行一时的Java EE标准,但因为实现了JavaEE中所有标准,想要 用里面的功能,是买一送二,不管用不用,反正都提供,属于“重量级”标准。EJB在互联网时代几乎已经 不出现了(但是在一些工业项目中还有EJB的应用)。EJB当年在Java的地位和诺基亚手机当年在手机行 业的地位是一样的,而Spring框架就是目前手机界的苹果,国内的华为。

随着技术的更替,可能十年后,又有新的技术把Spring给替代了。我们现在把Spring学好,将来会流行 一句话:“来孩子,给你介绍一下。这位是当年Spring玩的贼6的老爷爷”

既然提到了Spring框架之父Rod Johnson(罗宾·约翰逊,悉尼大学计算机硕士,音乐博士),就必须要 说一下他大力宣扬的《轮子理论》。《轮子理论》是Spring框架的宗旨,也是Spring框架能够被其他人 能接受的原因。

轮子理论:不要重复的创造轮子。这里面的轮子就是汽车的轮子,告诉我们已经生产过的轮子就拿过来 用,没必须重复生产多余的轮子。

轮子理论放在Spring框架上:我们Spring框架不发明新的技术,我们只是让已经有的技术,使用起来更加简单(整个Spring框架最重要的一句话,Spring框架的作用到底是干什么的)。乍一看这句话没问题,但细品能发现Rod Johnson是个纯老六。说Spring框架不发明新的技术,是告诉别的公司,我们不抢你们 的生意,来用我,我还能让你们的技术用起来更加方便。但实际上 MVC框架:曾经Apache爆火的Struts1和Struts2都被Spring MVC给干掉了,近几年Spring 自己又出了 WebFlux自己要干自己。

数据访问层框架:曾经的Hibernate目前被MyBatis干掉了。Spring 团队出了Spring Data 一直在和 MyBatis竞争。

2014年Spring Boot出现后又开始自己干自己了,要取代掉Spring框架。话又说回来了,虽说不学 Spring框架,直接学习Spring Boot也可以。但是学习完Spring框架可以很轻松的学会Spring Boot框 架,所以一般都拿Spring 框架作为Spring Boot框架基础学,同时在部分公司的项目依然使用Spring框 架,所以学习Spring框架的意义还是比较大的。 

3.Spring Framework 主版本发布时间 

到文档制作时,Spring框架最新版为6.0.6,所以本套课程就以Spring Framework 6.0.6 版本进行讲解。

4.Spring Framework 各个版本重大变化 

那就不能只说Spring Framework 5 和 Spring Framework 6的区 别,这样弄的好像同学们之前学习过Spring Framework 5一样。所以有必要来说一说Spring 从1.X版本 到6.X版本的重大变化。这样才能深刻的感受到Spring Framework的发展变化。

5.Spring Framework 5和6次版本支持时间 

6.Spring Framework 6 包含的模块 

Spring 从3.0 版本开始把一个项目拆分成多个项目。到目前的Spring Framework 6版本,共计分为20个 子模块。

Test 

对应spring-test.jar. Spring提供的测试工具, 可以整合JUnit测试或TestNG, 简化测试环节.

Core Container

Spring的核心组件, 包含了Spring框架最基本的支撑.

Beans, 对应spring-beans.jar. Spring进行对象管理时依赖的jar包.

Core, 对应spring-core.jar, Spring核心jar包,很多基础核心类都在这个包中。

Context, 对应spring-context.jar, Spring容器上下文对象.除了包含容器类型,很多第三方支持的内容 都在这个模块中。

Expression, 对应spring-expression.jar, Spring表达式语言.可以通过表达式快速获取容器内容。 JCL,对应spring-jcl.jar。

Spring日志,从spring老版本要求使用commons-logging.jar,从spring 5.x 开始,自己对commons-logging做了封装。

AOP

面向切面编程, 对应spring-aop.jar.

Aspects

AspectJ的具体实现,面向切面编程的另一种实现。对应spring-aspects.jar

Instrumentation

服务器代理接口的具体实现。对应spring-instrument.jar

Messaging

集成messaging api和消息协议提供支持。对应spring-messaging.jar

Data Access/Integration

Spring对数据访问层的封装

JDBC, 对应spring-jdbc.jar. Spring对jdbc的封装, 当需要使用spring连接数据库时使用. spring-jdbc.jar 需要依赖spring-tx.jar.

Transactions, 对应spring-tx.jar. 事务管理。

ORM, 对应spring-orm.jar. spring整合第三方orm框架需要使用的jar包, 例如Hibernate框架.

OXM,对应spring-oxm.jar。spring对XML序列化实现,本质是对Marshalling XML的支持。 R2DBC,对应spring-r2dbc.jar。对数据库响应式编程的支持。

JMS,对应spring-jms.jar。

Spring 提供对JMS的框架。

Web 

Spring对javax下的接口或类做的扩展功能.

web,对应spring-web.jar, Spring框架在Java Web项目使用时必须的包。

webmvc,对应spring-webmvc.jar, 实际上就是SpringMVC框架.

webflux,对应spring-webflux.jar,和Spring MVC类似,但是是目前比较流行的响应式编程。

websocket,对应spring-websocket.jar。spring对websocket的支持。

学习Spring其实就是在分别学习Spring所有模块的功能。随着Spring框架的不断发展,在Spring官方压 缩包中包含的模块对应的jar也越来越多。

如果希望下载官方压缩包,查看所有jar包,可以通过下面链接下载。在Maven项目中,不需要单独下载 下面内容。

友情提示:Spring 6目前只有源码,没有官方打包的dist。5.x和之前的版本都可以下载到官方打包的 dist。

链接地址:

https://github.com/spring-projects/spring-framework/tags 
https://repo.spring.io/libs-release-local/org/springframework/spring/

 

万丈高楼平地起,首先从最核心模块Core Container模块开始讲起。里面包含了Spring 最核心的功能之 一IoC/DI

三、Spring IoC/DI 详解 

1.为什么要学习IoC/DI

就是因为IoC/DI 是 Spring Framework 的基础。Spring Framework 其他所有功能都是在IoC/DI 基础上 研发的。

2.脱离Spring Framework,理解下IoC/DI是什么 

IoC 和 DI 并不是 Spring Framewok 提出的,这点小伙伴一定要谨记。之所以先脱离Spring Framework 来讲解IoC/DI就是为了让小伙伴们知道:

IoC/DI 不是Spring Framework特有的。Spring Framework 只是IoC/DI具体实现框架的一种

 真正的理解下到底IoC/DI是什么。

IoC 英文全称 Inversion of Control ,取三个单词首字母,标准写法字母I和字母C大写,字母o小写。国 内认可度最高的翻译:“控制反转”。

在1996年,由Michael Mattson(迈克尔·马特森)在一篇讨论面向对象框架文章中最先提出 IoC 概念 的。文章中强调:可以借助第三方来解除具有依赖关系对象的耦合性。这个指导思想也就是我们在学习 IoC时一直听到的,IoC作用是解耦

先来看看没有使用IoC和使用IoC后对比图

从图中可以看到,没有使用IoC时。想要使用对象A,但是因为对象A依赖对象B,对象B依赖对象C。这 时就必须在自己的系统中先实例化对象C,然后实例化对象B,并把对象C注入(把对象C赋值给对象B中 依赖的内容)给对象B,然后在实例化对象A,在把对象B注入给对象A。所以对象A的实例化受对象B和 对象C的影响,这样对象之间耦合度较高。而且随着系统功能的不断添加,对象A可能不仅仅依赖对象 B,对象C,而是依赖几个,十几个,甚至几十个对象。在这样复杂的系统中,这几十个对象可能因为其 中一个出问题,而导致对象A的不可用。这些对象就属于耦合度过高。

使用IoC后,所有对象的控制权(实例化)都交给了第三方的IoC 容器(IoC Container),对象之间注 入都交给容器去完成。这样从对象实例化到在容器内部对象之间注入的整个过程就是所谓的IoC。所以千 万不要觉得IoC就是:“由程序员实例化的事情交给容器”,这样理解太片面了。

随着IoC的发展,IoC不再是为了实例化某个对象,而把某个对象放入到容器中。而是结合面向对象中多 态(也是我们所说的面向接口编程),当我们想要某个类型的对象时,告诉IoC容器,要的是某个类型的 基类(父类)或接口,然后通过特定的规则,让容器挑选出我们想要的对象。这样我们更不需要关注类 型对象的细节,完全有第三方容器进行控制,实现真正意义上的解耦。这也是为什么我们在使用IoC时都 是获取接口类型对象或基类类型对象。 

 

2004年,Martin Fowler(马丁·福勒)对IoC做出了再次探讨。想要实现IoC,其中一个步骤,包含由IoC 容器动态的把当前对象所依赖的对象注入进来。也就是说实现IoC的过程必定包含注入。为了让IoC更加 好理解,给IoC起了另外一个名字DI(Dependency Injection,依赖注入)。

所以:IoC和DI是同一件事情。只是从不同角度,起了两个不同的名称。小伙伴们在理解IoC和DI时千万不 要认为他俩是两个事情。这就好比我正常的名字叫做张佳明,但是写代码时我用的名字是smallming, 是一样的道理的,只是称呼不同,但都是我。 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DAO(Data Access Object)

ProductDAO.java Search.java (Servlet) Compile Tomcat http://localhost:8080/book/chapter15/search.jsp Insert.java Compile http://localhost:8080/book/chapter15/insert.jsp

介绍用户协议报UDP

作者:爱塔居 专栏:计算机网络 文章目录 目录 文章目录 一、UDP概述 二、UDP的首部格式 一、UDP概述 用户数据报协议UDP只是在IP的数据报服务之上增加了很少一点的功能:复用和分用的功能以及差错检测的功能。 重点要记住UDP的主要特点&am…

JDK 下载 华为云镜像站 地址

通常去 Oracle 官网下载 JDK,速度很慢而且需要账号登入 Oracle 官网下载地址 https://www.oracle.com/cn/java/technologies/downloads/archive/ JDK 下载 华为云镜像站 地址 https://repo.huaweicloud.com/java/jdk/ 我们下期见,拜拜!

C++程序生成文件

文章目录 VS2019 Debug 模式VS2019 Release 模式exe连接动态库和静态库的流程 VS2019 Debug 模式 在Visual Studio的Debug模式下运行程序时,会生成以下文件: 可执行文件(.exe):生成的可执行文件(.exe&#…

深度学习常用激活函数总结

激活函数的特点 非线性。引入非线性能提升模型的表达能力可微分。如果激活函数不可微,那就无法使用梯度下降方法更新参数非饱和性。饱和指在某些区间上激活函数的梯度接近于零,使参数无法更新取值范围有界。这样可以使网络更稳定,即使有很大…

dede tag不以关键词作为url以数字作为url方法修改

dede tag不以关键词作为url以数字作为url方法修改 打开/include/taglib/tag.lib.php 查找以下代码: $row[link] $cfg_cmsurl."/tags.php?/".urlencode($row[keyword])."/"; 替换为: $row[link] $cfg_cmsurl."/tags.php?/&q…

RoPE旋转位置编码图形化理解

很多博文用公式描述RoPE的作用,看来看去还是似懂非懂,本文用图形的方式形象化的展示RoPE的作用; 首先,RoPE的核心思想是通过绝对位置编码的方式实现相对位置编码,本文主要围绕下图进行介绍; 假设一个序列…

第二章 Android 基础--开发基础

文章目录 1.使用真机调试运行2.Android开发涉及的编程语言3.工程目录结构4.编译配置文件 build.gradle5.清单文件6.界面显示与逻辑处理7.Activity创建与跳转8.练习题 本专栏主要在B站学习视频: B站Android视频链接 本视频范围:P9—P16 工程结构、设计规…

redis数据类型和数据结构你了解吗 学习总结篇!

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 这期给大家讲一下关于 Redis 数据类型和数据结构的区别,很多读者包括笔者自己,早期也是傻傻分不清。备注:部分图片借鉴小林哥&…

计数排序

计数排序 排序步骤 1、以最大值和最小值的差值加一为长度创建一个新数组 2、将索引为0对应最小值,索引为1对应最小值1,索引为2对应最小值2,以此类推,将索引对应最小值到最大值之间所有的值 3、遍历一遍,遇到一个数字…

hcip第一天——复习静态路由习题

目录 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试 要求 1.绘制拓扑及划分网段 2.配置 1.lsw1 2.lsw2 3.R1 4.R2 5.R3 6.R4 7.R5 8.R6 9.部分pc 10.部分测试

SpringBoot【原理分析、YAML文件、SpringBoot注册web组件】(二)-全面详解(学习总结---从入门到深化)

目录 SpringBoot原理分析_核心注解 YAML文件_配置文件介绍 YAML文件_自定义配置简单数据 YAML文件_自定义配置对象数据 YAML文件_自定义配置集合数据 YAML文件_读取配置文件的数据 使用ConfigurationProperties读取 YAML文件_占位符的使用 YAML文件_配置文件存放位置及优…

react+unittest+flask 接口自动化测试平台

目录 1 前言 2 框架 2-1 框架简介 2-2 框架介绍 2-3 框架结构 3 平台 3-1 平台组件图 1 新建用例 2 生成测试任务 3 执行并查看测试报告 3-2 用例管理 3-2-1 用例设计 3-3 任务管理 3-3-1 创建任务 3-3-2 执行任务 3-3-3 测试报告 3-3-4 邮件通知 1 前言 在现…

【电路原理学习笔记】第3章:欧姆定律:3.4 电阻的计算

第3章:欧姆定律 3.4 电阻的计算 电阻相关欧姆定律公式: R V I R\frac{V}{I} RIV​ 【例3-16】在图3-13所示的电路中,电阻为多少时,电池的电流才为3.08A? 【答】 R V I 12 V 3.08 A 3.90 Ω R\frac{V}{I}\frac{1…

AI大模型的现状与发展

AI大模型的现状与发展 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄 ✨座右铭…

leetcode 108. 将有序数组转换为二叉搜索树

2023.7.16 由数组构造二叉搜索树地问题,本题可以借鉴从中序与后序遍历序列构造二叉树 这道题,这类题本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。 下面直接看代码: class Solution { public:Tree…

电子器件系列43:贴片led、发光二极管

干货!发光二极管的全面解读 二极管、发光二极管参数详解_sam-zy的博客-CSDN博客 对几个型号的贴片led进行参数解读: ols-330 特性: 带镜头,从PCB背面安装 视角40 贴片1206 尺寸:3.2(长)x1.6(宽)x1.9(高)mm …

明代元素时装小姐姐【InsCode Stable Diffusion美图活动一期】

一、 Stable Diffusion 模型在线使用地址:https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型版本及相关配置: 模型:chilloutmix_NiPrunedFp32Fix Lora:hanfu_ming 采样迭代步数(steps): 40 采样…

故障排错篇之OSPF协议

一、OSPF邻居建立不成功 1、从理论上判断问题的所在 1.1、检查邻居两端的接口物理和协议状态是否UP,状态是否稳定,接口是否有丢包,两边互ping大包是否能通 若物理接口不Up或是不稳定(有振荡现象),请排查…