前言
迅速看懂理解一样新的事物,我认为最直接最快的方法是:置身事外,身临高处,纵观其全貌,细查其所有。比如,要了解一个树林里都有什么树种长势如何,不能上来就进到树林里观察。首先要置身树林之外,纵观树林全貌面积大小,了解各种树种在树林中的分布位置;然后再进入树林一一细致的观察研究。按照这样的思想,来剖析一下Spring内部构造。
1.Spring总体架构
下面是Spring官方提供的整体架构图,主要有核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web和其他模块(AOP、Aspects、Instrumentation、Messaging及Test)
2.核心容器(Core Container)
核心容器由spring-beans、spring-core、spring-context和SqEL组成
- Spring-core:基本组成部分,实现控制反转和依赖注入;
- Spring-beans:工厂模式(BeanFactory)实现,前面提到的对象集中生产;
- Spring-context:该模块的基础是core和beans,继承自beans,其中可通过ApplicationContext接口主动获取对应的Java对象。其中包括:spring-context-support实现提供对第三方库集成Spring上下文的支持,比如缓存(EhCache,Guava,JCache)、邮件(JavaMail)、调度(CommonJ,Quartz)、模板引擎(FreeMarker,JasperReports,Velocity)等。
- SqEL:即Spring表达式语言,Spring Expression Language。
3.数据访问/集成(Data Access/Integration)
数据访问/集成由 JDBC(Java Data Base Connectivity),ORM(Object Relational Mapping),OXM(Object Xml Mapping),JMS(Java Mail Service) 和Transaction(事务)组成
- JDBC:实现JDBC抽象层,省去开发各个数据库供应商的连接实现;
- ORM:实现对流行的对象关系映射API的集成,使Spring轻松整合其他的ORM框架的功能;
- OXM:实现对OXM对象映射关系的集成,如:xmlBeans;
- JMS:实现生产(produce)和消费(consume)消息的功能集成,使Spring具有整合其他消息中间件能力;
- Transaction(事务):实现特殊接口类及所有的 POJO 支持编程式和声明式事务管理。
4.Web模块
Web 模块由 WebSocket 、Servlet、Web和Portlet
- WebSocket:提供了客户端和服务器端之间通信;
- Servlet:监听器初始化IOC容器;
- Web:提供Web应用模型的视图控制;
- Portlet:提供用于Portlet环境的MVC实现,并反映Spring-webmvc模块的功能。
5.其他模块
除了上边三个常用模块外,还有比较重要的 AOP、Aspects、Instrumentation、Web 和Test模块
- AOP:实现面向切面的编程思想,可以自定义拦截器和切入点,实现代码的解耦;
- Aspects:提供对 AspectJ 的集成,AspectJ 是一个功能强大而且比较成熟的面向切面编程(AOP)框架;
- Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现;
- Messaging:提供对STOMP的支持,也支持注解编程模型;
- Test:支持 JUnit 或 TestNG 框架的 Spring 组件测试。
结束语
至此, Spring的全貌已经一览无余,接下来就该进入Spring这个巨大的森林中,对它具有的功能学习研究,彻底的全面的消化这一“古老”框架。限于作者的水平和见解,如有不妥之处,希望不吝赐教,欢迎批评指正!!!