官网:https://spring.io,从官网我们可以大概了解到:
Projects
中查看其包含的所有技术。Spring 发展到今天已经形成了一种开发的生态圈,Spring 提供了若干个项目,每个项目用于完成特定的功能。
说明:
图中的图标都代表什么含义,可以进入https://spring.io/projects
网站进行对比查看。
这些技术并不是所有的都需要学习,额外需要重点关注Spring Framework
、SpringBoot
和SpringCloud
:
Spring 发展史
IBM(IT 公司-国际商业机器公司)在 1997 年提出了 EJB 思想,早期的 JAVAEE 开发大都基于该思想。
Rod Johnson(Java 和 J2EE 开发领域的专家)在 2002 年出版的Expert One-on-One J2EE Design and Development
,书中有阐述在开发中使用 EJB 该如何做。
Rod Johnson 在 2004 年出版的Expert One-on-One J2EE Development without EJB
,书中提出了比 EJB 思想更高效的实现方案,并且在同年将方案进行了具体的落地实现,这个实现就是 Spring1.0。
随着时间推移,版本不断更新维护,目前最新的是 Spring5
本节介绍了 Spring 家族与 Spring 的发展史,需要大家重点掌握的是:
(1)核心层
(2)AOP 层
(3)数据层
(4)Web 层
(5)Test 层
介绍完 Spring 的体系结构后,从中我们可以得出对于 Spring 的学习主要包含四部分内容,分别是:
在 Spring 核心概念这部分内容中主要包含IOC/DI
、IOC容器
和Bean
,那么问题就来了,这些都是什么呢?
要想解答这个问题,就需要先分析下目前咱们代码在编写过程中遇到的问题:
(1)业务层需要调用数据层的方法,就需要在业务层 new 数据层的对象
(2)如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署
(3)所以,现在代码在编写的过程中存在的问题是:耦合度偏高 ——> 牵一发而动全身
针对这个问题,该如何解决呢?
我们就想,如果能把框中的内容给去掉,不就可以降低依赖了么,但是又会引入新的问题,去掉以后程序能运行么?
答案肯定是不行,因为 bookDao 没有赋值为 Null,强行运行就会出空指针异常。
所以现在的问题就是,业务层不想 new 对象,运行的时候又需要这个对象,该咋办呢?
针对这个问题,Spring 就提出了一个解决方案:
这种实现思就是 Spring 的一个核心概念
(1)什么是控制反转呢?
使用对象时,由主动 new 产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。
new
的别人[外部]
来创建对象别人[外部]
就反转控制了数据层对象的创建权
(2)Spring 和 IOC 之间的关系是什么呢?
别人[外部]
指的就是 Spring 的 IOC 容器
(3)IOC 容器的作用以及内部存放的是什么?
(4)当 IOC 容器中创建好 service 和 dao 对象后,程序能正确执行么?
像这种在容器中建立对象与对象之间的绑定关系就要用到 DI:
(1)什么是依赖注入呢?
在容器中建立 bean 与 bean 之间的依赖关系的整个过程,称为依赖注入
new
的别人[外部其实指的就是IOC容器]
来给注入进来
(2)IOC 容器中哪些 bean 之间要建立依赖关系呢?
介绍完 Spring 的 IOC 和 DI 的概念后,我们会发现这两个概念的最终目标就是:充分解耦,具体实现靠:
这节比较重要,重点要理解什么是IOC/DI思想
、什么是IOC容器
和什么是Bean
:
(1)什么 IOC/DI 思想?
(2)什么是 IOC 容器?
Spring 创建了一个容器用来存放所创建的对象,这个容器就叫 IOC 容器
(3)什么是 Bean?
容器中所存放的一个个对象就叫 Bean 或 Bean 对象
手机扫一扫
移动阅读更方便
你可能感兴趣的文章