(1)核心层
* Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块
(2)AOP层
* AOP:面向切面编程,它依赖核心层容器,目的是==在不改变原有代码的前提下对其进行功能增强==
* Aspects:AOP是思想,Aspects是对AOP思想的具体实现
(3)数据层
* Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
* Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
* Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现,也是后期学习的重点内容
(4)Web层
* 这一层的内容将在SpringMVC框架具体学习
(5)Test层
* Spring主要整合了Junit来完成单元测试和集成测试
介绍完
Spring
的体系结构后,从中我们可以得出对于
Spring
的学习主要包含四部分内容,分别是
:
Spring
的
IOC/DI
Spring
的
AOP
AOP
的具体应用
,
事务管理
IOC/DI
的具体应用
,
整合
Mybatis
![](https://img-blog.csdnimg.cn/aa69497e22f14f5fb0f3d0bff9925f55.png)
2.3 Spring
核心概念
在
Spring
核心概念这部分内容中主要包含
IOC/DI
、
IOC
容器
和
Bean
,
那么问题就来了,这些都是什
么呢
?
2.3.1
目前项目中的问题
要想解答这个问题,就需要先分析下目前咱们代码在编写过程中遇到的问题:
![](https://img-blog.csdnimg.cn/208554bd0e614aa49b5f8ca2462a465f.png)
(1)
业务层需要调用数据层的方法,就需要在业务层
new
数据层的对象
(2)
如果数据层的实现类发生变化,那么业务层的代码也需要跟着改变,发生变更后,都需要进行编译打包和重部署
(3)
所以,现在代码在编写的过程中存在的问题是:
耦合度偏高
针对这个问题,该如何解决呢
![](https://img-blog.csdnimg.cn/c3d84046fbfc41f0b124b15c9c6f1b2e.png)
我们就想,如果能把框中的内容给去掉,不就可以降低依赖了么,但是又会引入新的问题,去掉以后程序能运行么
?
答案肯定是不行,因为
bookDao
没有赋值为
Null
,强行运行就会出空指针异常。
所以现在的问题就是,业务层不想
new
对象,运行的时候又需要这个对象,该咋办呢
?
针对这个问题,
Spring
就提出了一个解决方案
:
使用对象时,在程序中不要主动使用
new
产生对象,转换为由
外部
提供对象
这种实现思就是
Spring
的一个核心概念