Spring总共大约有20个模块,由1300多个不同的文件构成。这些组件被分别整合在核心容器(CoreContainer)、AOP(Aspect Oriented Programming)和设备支持(Instrmentation)、数据访问及集成(Data Access/Integeration)、Web、报文发送(Messaging)、Test等6个模块集合中。
模块结构图如下:
![](https://img.haomeiwen.com/i1377793/e7647fe9e1ebaa19.png)
组成Spring框架的每个模块集合或者模块都可以单独存在,也可以一个或多个模块联合实现。
每个模块的组成和功能如下:
1. 核心容器(CoreContainer)
由spring-beans、spring-core、spring-context和spring-expression(Spring Expression Language,SpEL)4个模块组成。
spring-beans和spring-core模块是Spring框架的核心模块,包括了控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)。
BeanFactory接口是Spring框架中的核心接口,它是工厂模式的具体实现。BeanFactory使用控制反转对应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。但BeanFactory容器实例化后并不会自动实例化Bean,只有当Bean被使用时BeanFactory容器才会对该Bean进行实例化与依赖关系的装配。
spring-context模块架构于核心模块之上,扩展了BeanFactory,为它添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任何调度等,ApplicationContext是该模块的核心接口,它是BeanFactory的超类,与BeanFactory不同,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。
spring-expression模块是统一表达式语言(EL)的扩展模块,可查询、管理运行中的对象,同时也方便的可调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模块函数。这种语言的特性是基于Spring产品的需求而设计,它可以非常方便的同Spring IOC进行交互。
2. AOP和设备支持
由spring-aop、spring-aspects和spring-instrument等3个模块组成。
spring-aop是Spring的另一个核心模块,是AOP主要的实现模块。作为继OOP后,对程序员影响最大的编程思想之一,AOP极大地开拓了编程思路。在Spring中,以JVM动态代理技术为基础,设计出了一系列的AOP横切实现,如前置通知、返回通知、异常通知等,同时Pointcut接口来匹配切入点,可使用现有的切入点来设计横切面,也可扩展相关方法根据需求进行切入。
spring-aspects模块集成自AspectJ框架,主要是为Spring AOP提供多种AOP实现方法。
spring-instrument模块是基于Java SE的“java.lang.instrument”进行设计的,应算是AOP的一个支援模块,主要作用是在JVM启动时,生成一个代理类,程序员可通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP功能。
3. 数据访问及集成
由spring-jdbc、spring-tx、spring-orm、spring-jms和spring-oxm等5个模块组成。
spring-jdbc模块是Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC。主要是提供JDBC模块方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类是JdbcTemplate、SimpleJdbcTemplate以及NamedParameterJdbcTemplate.
spring-tx模块是Spring JDBC事务控制实现模块。使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可灵活的配置在任何一层;但在很多需求和应用,直接使用JDBC事务控制还是有其优势的。其实,事务是以业务逻辑为基础的;一个完整的业务应该对应业务层里的一个方法;如果业务操作失败,则整个事务回滚;所以事务控制得必须放在业务层;但持久层的设计则遵循一个重要的原则:保证操作的原子性,即持久层里的每个方法都应是不可分割的。所以在使用Spring JDBC事务控制时,应注意其特殊性。
spring-orm模块是ORM框架的支持模块,主要集成Hibernate、JavaPersistenceAPI(JPA)、JavaDataObjects(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略。
spring-jms模块(Java Messaging Service)能够发送和接受信息,自Spring Framework4.1后,它还提供了对spring-messaging模块的支撑。
spring-oxm模块主要提供一个抽象层以支撑OXM(Object-to-XML-Mapping,是一个O/M-mapper,将java对象映射成XML数据,或将XML数据映射成java对象),如JAXB、Castor、XMLBeans、JiBX和XStream等。
4. Web
由spring-web、spring-webmvc、spring-websocket和spring-webflux等4个模块组成。
spring-web模块为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或Listeners来初始化IOC容器,也包含一些与Web相关的支持。
spring-webmvc模块是一个Web-Servlet模块,实现了SpringMVC(model-view-Controller)的Web应用。
spring-websocket模块主要是与Web前端的全双工通讯的协议。
spring-webflux是一个新额非阻塞函数式ReactiveWeb框架,可用来建立异步、非阻塞、事件驱动的服务,并且扩展性非常好。
5. 报文发送
即spring-messaging模块,从Spring4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用。
6. Test
即spring-test模块,主要为测试提供支持,在不需要发布(程序)到应用服务器或链接到其它企业设施的情况下能够执行一些集成测试或其它测试对于任何企业都是非常重要的。
网友评论