聊完了Spring框架中最重要的两种设计模式,我们来看一下Spring框架的模块和结构图。
Spring框架的结构
下图是Spring官方给出的Spring框架的结构图。
从图中我们可以看到Spring的四大部分:核心容器(container)、AOP模块、Web模块、Data模块。
- 首先看核心容器,从核心俩字我们可以看出,这是Spring最重要的部分。主要的功能是实现了控制反转(IOC)与依赖注入(DI)、Bean配置、加载以及生命周期的管理。
- AOP模块:负责Spring的所有AOP(面向切面)的功能。
- Web模块:扩展了Spring的Web功能。使其符合MVC的设计规范,最重要的是提供了Spring MVC的容器。
- Data模块:提供了一些数据相关的组件:包括JDBC、orm(对象关系映射)、事务操作、oxm(对象xml映射)、Jms(Java消息服务)。
我们可以看到Spring给我们提供的模块相当的丰富,无论是持久层、业务层还是控制层都有所涉及。
- Spring几乎包揽除了业务逻辑之外的的所有工作,包括日志管理、事务管理、Bean管理、安全管理等。
- Spring致力于全套的Java问题的解决方案,在所有的Java可以涉足的领域,Spring都会提供相应的支持。(即使没有支持,也会让我们去整合)
- 与第三方框架的整合。在我的理解中Spring框架就像一个插线板,而第三方框架就相当于插头,可以轻易地与它组合在一起。需要的时候就插上去,不需要的时候就拔掉,相当的方便。
既然Spring如此的方便,那么它又是如何做到的呢?
很简单,通过两点:
- 控制反转(IOC)
- 面向切面编程(AOP)
控制反转(IOC)/依赖注入(DI)
既然说到控制反转,那么我们不禁要问什么控制被反转了?
答案是:我们对对象的控制权被反转了。我们将对象的控制交给了Spring的容器。
那么问题又来了,什么是Spring的容器?
简单的说,Spring容器就是一个超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。Spring容器管理着容器中Bean之间的依赖关系,Spring使用一种被称为“依赖注入”的方式来管理Bean之间的依赖关系。
什么又是依赖注入呢?
依赖注入(DI)就是控制反转的一种实现形式,Spring容器也是通过这种形式管理Bean的。
Spring容器如何做到替你管理这些bean的呢?
工厂模式。
Spring框架费了九牛二虎之力创建一个Spring容器去帮我们管理这些Bean又有什么好处呢?
其实和工厂模式的好处差不多:
- 解除硬编码耦合,利于项目升级和维护;
- 简化了对象的管理,使我们更加专注于业务操作;
聊完了控制反转我们再来看看Spring框架的另一项关键技术AOP。
面向切面编程(AOP)
什么是面向切面编程?
面向切面编程:在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
这句话读完估计跟没读没什么区别,还是没懂。下面我们来看一张图:
从图中我们可以看出:我们每写一个业务功能,都需要判断权限、记录日志、提交事务、这些逻辑是不是都是重复的呀,这相当于什么呢?相当于我们前面说的脏活累活,这都不是我们的重点,我们的重点是业务逻辑,就是说我们需要把整体框架搭好,实际编写的时候只需要将我们的业务代码切入到框架之中,就行了。
原理:代理模式。
为什么需要AOP?
AOP专门用于处理系统中分布于各个模块或者不同方法中的交叉关注点的问题。比如:在程序中,我们常常需要处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP是一种非常常用的解决方案。
面向切面编程对我们来说有什么好处?
- 减少重复;
- 专注业务;
注意:面向切面编程只是面向对象编程的一种补充。
讲了这么多我们来对Spring框架做一个总结。
Spring 总结
- Bean的统一管理,降低了对象之间的耦合
- 对主流的框架提供了很好的集成支持
- 提供众多组件,事务管理,JDBC等
- 具有高度可开放性,开发者可以自由选择Spring部分或全部
- 主要使用工厂模式和代理模式。
- 低侵入,代码污染极低。(我们不会因为用了spring而影响我们的正常的业务逻辑)
- AOP的很好支持,方便面向切面编程(AspectJ)。
下一节,我们将讨论Spring框架在WEB开发的应用Spring MVC。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。