学习Spring源码前必须要清楚的Spring最基本的架构
Spring的整体架构
ps:我看的书比较老,所以有可能一些博客spring介绍的架构必然比我的还要完善,但这不对学习源码有任何影响。
(1)Core Container
Spring的核心容器,包含了Beans、Core、Context、Expression Language模块。
Core和Beans为Spring的基础模块,提供控制反转(IOC)和依赖注入(DI)的特性支持。Spring的基础容器概念为BeanFactory,它提供经典的工厂模式来实现消除对程序单例模式的需求(意思就是以前需要用到就创建New,现在提前创建好,使用即可),并真正允许从程序逻辑中分离出依赖关系和配置。
Core模块
Spring框架的基本核心工具类,Spring的其它组件都要使用到这个包里的类,Core模块是其它组件的基本核心。
Beans模块
此模块包含访问配置文件、创建和管理bean以及进行Inversion of Control/Dependency Injection(IoC/DI)操作相关的所有类。
Context模块
在Core与Beans模块的基础上,提供一种类似于JNDI注册器的框架时访问对象方法(就和spring容器一样的道理,不用过多了解)。Context模块继承了Beans的特性,为Spring核心提供了大量的扩展,添加了对国际化(例如资源绑定)、事件传播、资源加载和对Context的透明创建支持。Context模块同时支持J2EE的一些特性,例如EJB、JMX和基础的远程处理。ApplicationContext接口是Context模块的关键。
Expression Language模块
提供一个强大的表达式语言用于在运行时查询和操纵对象。
(2)Data Access/Integration
包含JDBC、ORM、OXM、JMS和Transaction模块。模块主要负责与数据相关的。
JDBC模块
模块包含Spring对JDBC数据访问进行封装的所有类。例如我们平常经常在properties下MySQL的数据源配置,甚至还能使用JDBCTemplate封装好的类。
ORM模块
对象关系映射API,如JPA、JDO、iBatis等,提供了一个交互层。
OXM模块
提供一个对Object/XML映射实现的抽象层,Object/XML映射实现包括最经常用得就是XMLBeans。
JMS模块
主要包含一些制造和消费消息的特性。
Transaction模块
支持编程和声明性的事务管理。
(3)Web
建立在应用程序的上下文模块之上,为基于Web的应用程序提供了上下文。简化处理请求以及将参数绑定到域对象的工作
Web模块
提供基础的面向Web的集成特性。例如多文件上传等。
Web-Servlet模块
模块包含Spring的model-view-controller(MVC)实现。Spring的MVC框架使得模型范围内的代码和Web forms之间能够清楚地分离开来,并与Spring框架的其它特性集成到一起。
Web-Struts模块
提供对Struct的支持。
Web-Porlet模块
提供了用于Porlet环境和Web-Servlet模块的MVC的实现。
AOP
模块提供一个符合AOP联盟标准的面向切面编程的实现。可以定义方法的拦截器和切点,从而将逻辑代码分开,降低他们之间的耦合性。