一、结构体现的价值
1、可读性强。
2、可维护性。
3、优秀的框架均具有分而治之的思想。清晰的设计、合理的归类、模块化是走向优秀框架的基础性武器。
二、Spring框架的模块划分
1、整体轮廓
Spring框架包含的功能大约由20个小模块组成。这些模块按组可分为核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP和Aspects)、设备(Instrumentation)、消息(Messaging)和测试(Test)。
2、 模块解读
下面对各个模块进行详细介绍:(这些模块我们也可以在Spring的GitHub上查看到:GitHub - spring-projects/spring-framework: Spring Framework)
(1) 核心容器(Core Container)——Beans、Core、Context、Expression
该层由4个模块组成:spring-beans spring-core spring-context spring-expression(spring expression Language,SpEl) 。它们对应的jar包如下:
- spring-core:该模块是依赖注入IoC与DI的最基本实现。
- spring-beans:该模块是Bean工厂与bean的装配。
- spring-context:该模块构架于核心模块之上,它扩展了 BeanFactory,为它添加了 Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。ApplicationContext 是该模块的核心接口,它的超类是 BeanFactory。与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例 Bean 进行实例化与依赖关系的装配,使之处于待用状态。
- spring-context-indexer:该模块是 Spring 的类管理组件和 Classpath 扫描。
- spring-context-support:该模块是对 Spring IOC 容器的扩展支持,以及 IOC 子容器。
- spring-expression:该模块是Spring表达式语言块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。
(2) 数据访问与集成(Data Access/Integration)——Jdbc、Orm、Oxm、Jms、Transactions
该层由spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 个模块组成。它们对应的jar包如下:
- spring-jdbc:该模块提供了 JDBC抽象层,它消除了冗长的 JDBC 编码和对数据库供应商特定错误代码的解析。
- spring-tx:该模块支持编程式事务和声明式事务,可用于实现了特定接口的类和所有的 POJO 对象。编程式事务需要自己写beginTransaction()、commit()、rollback()等事务管理方法,声明式事务是通过注解或配置由 spring 自动处理,编程式事务粒度更细。
- spring-orm:该模块提供了对流行的对象关系映射 API的集成,包括 JPA、JDO 和 Hibernate 等。通过此模块可以让这些 ORM 框架和 spring 的其它功能整合,比如前面提及的事务管理。
- spring-oxm:该模块提供了对 OXM 实现的支持,比如JAXB、Castor、XML Beans、JiBX、XStream等。
- spring-jms:该模块包含生产(produce)和消费(consume)消息的功能。从Spring 4.1开始,集成了 spring-messaging 模块。
(3) Web——Web、Webmvc、WebFlux、Websocket
该层由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 个模块组成。它们对应的jar包如下:
- spring-web:该模块为 Spring 提供了最基础 Web 支持,主要建立于核心容器之上,通过 Servlet 或者 Listeners 来初始化 IOC 容器,也包含一些与 Web 相关的支持。
- spring-webmvc:该模块众所周知是一个的 Web-Servlet 模块,实现了 Spring MVC(model-view-Controller)的 Web 应用。
- spring-websocket:该模块主要是与 Web 前端的全双工通讯的协议。
- spring-webflux:该模块是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。
(4) 面向切面编程——AOP,Aspects
该层由spring-aop和spring-aspects 2个模块组成。它们对应的jar包如下:
- spring-aop:该模块是Spring的另一个核心模块,是 AOP 主要的实现模块。
- spring-aspects:该模块提供了对 AspectJ 的集成,主要是为 Spring AOP提供多种 AOP 实现方法,如前置方法后置方法等。
(5) 设备(Instrumentation)——Instrmentation
spring-instrument:该模块是基于JAVA SE 中的"java.lang.instrument"进行设计的,应该算是 AOP的一个支援模块,主要作用是在 JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现 AOP 的功能。
(6) 消息(Messaging)——Messaging
spring-messaging:该模块是从 Spring4 开始新加入的一个模块,主要职责是为 Spring 框架集成一些基础的报文传送应用。
(7) 测试(Test)——Test
spring-test:该模块主要为测试提供支持的,通过 JUnit 和 TestNG 组件支持单元测试和集成测试。它提供了一致性地加载和缓存 Spring 上下文,也提供了用于单独测试代码的模拟对象(mock object)。
三、核心模块提炼
1、Spring框架最重要的就是对IOC的应用,资源bean容器的设计极大提升了资源集中化的配置与管理。
2、还是那句话:有标准,统一化是提升生产力的重要秩序。