Spring有大约20个模块,由1300多个不同的文件组成。这些模块可以分为核心容器、AOP和设备支持、数据访问和集成、Web组件、通信消息和集成测试、集成兼容性等。Spring5的模块结构如下图所示。组成Spring框架的各个模块可以独立存在,也可以一个或多个模块共同实现。下面分别介绍各类型模块的组成和作用。1核心容器核心容器由四个模块组成:spring-beans、spring-core、spring-context和spring-expression(SpringExpressionLanguage,SpEL)。spring-beans和spring-core模块是Spring框架的核心模块,包括控制反转(IOC)和依赖注入(DI)。BeanFactory使用控制反转将应用程序的配置和依赖项规范与实际应用程序代码分开。但是BeanFactory在实例化之后并不会自动实例化Bean。只有在使用Bean时,BeanFactory才会实例化Bean并组装依赖项。spring-context模块建立在核心模块之上,扩展了BeanFactory,增加了Bean生命周期控制、框架事件系统、资源加载透明等功能。此外,该模块还提供了很多企业级的支持,如邮件访问、远程访问、任务调度等。ApplicationContext是该模块的核心接口,它的超类是BeanFactory。与BeanFactory不同的是,ApplicationContext会自动实例化所有的单实例bean,并在实例化后组装依赖,使其处于待机状态。spring-context-support模块是对SpringIoC容器和IoC子容器的扩展支持。spring-context-indexer模块是Spring的类管理组件和Classpath扫描组件。spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询和管理运行中的对象,也可以方便地调用对象方法,操作数组、集合等。它的语法类似于传统的EL,但提供了额外的功能,最显着的是简单字符串的函数调用和模板函数。EL的特性是根据Spring产品的需求设计的,与SpringIoC交互非常方便。2AOP和设备支持AOP和设备支持由三个模块组成:spring-aop、spring-aspects和spring-instrument。spring-aop是Spring的另一个核心模块,也是AOP的主要实现模块。AOP作为继OOP之后对程序员影响最大的编程思想之一,极大地拓展了人们的编程思想。基于JVM的动态代理技术,Spring设计了一系列AOP横切实现,如预通知、返回通知、异常通知等。同时Pointcut接口可以匹配入口点,可以利用已有的入口点来设计横截面,也可以根据需要扩展相关方法进行入口。spring-aspects模块是从AspectJ框架集成而来,主要是为Spring提供各种AOP的实现方式。spring-instrument模块是基于JavaSE中的java.lang.instrument设计的。应该算是AOP的一个支撑模块。它的主要功能是在启用JVM时生成一个代理类,程序员可以通过代理类在运行时修改类。字节,从而改变一个类的功能,实现AOP。3数据访问与集成数据访问与集成由五个模块组成:spring-jdbc、spring-tx、spring-orm、spring-oxm和spring-jms。spring-jdbc模块是Spring提供的JDBC抽象框架的主要实现模块,用于简化SpringJDBC操作。主要提供JDBC模板方法、关系数据库对象化方法、SimpleJdbc方法和事务管理来简化JDBC编程。主要实现类有JdbcTemplate、SimpleJdbcTemplate和NamedParameterJdbcTemplate。spring-tx模块是一个SpringJDBC事务控制实现模块。Spring对事务的封装非常好,通过它的AOP配置,可以在任意层级进行灵活的配置。但在很多需求和应用中,直接使用JDBC事务控制是有优势的。事务基于业务逻辑。一个完整的业务应该对应业务层的一个方法。如果业务操作失败,整个事务都会回滚,所以事务控制应该放在业务层。持久层的设计要遵循一个很重要的原则:保证操作的原子性,即持久层中的各个方法都应该是不可分割的。在使用SpringJDBC控制事务时,需要注意它的特殊性。spring-orm模块是一个ORM框架支持模块,主要集成了Hibernate、JavaPersistenceAPI(JPA)和JavaDataObjects(JDO),用于资源管理、数据访问对象(DAO)实现和事务策略。spring-oxm模块主要提供一个抽象层来支持OXM(OXM是Object-to-XML-Mapping的缩写,是一个O/M-mapper,将Java对象映射到XML数据,或者说将XML数据映射到Java对象),如JAXB、Castor、XMLBeans、JiBX、XStream等。spring-jms模块可以收发消息,从Spring4.1开始,也提供了对spring-messaging模块的支持。4Web组件Web组件由四个模块组成:spring-web、spring-webmvc、spring-websocket和spring-webflux。spring-web模块为Spring提供了最基础的Web支持,主要是基于核心容器,通过Servlet或者Listeners初始化IoC容器,同时也包括一些Web相关的支持。众所周知,spring-webmvc模块是一个实现SpringMVC(Model-View-Controller)Web应用的Web-Servlet模块。spring-websocket模块是一种与Web前端进行全双工通信的协议。spring-webflux是一个全新的非阻塞函数式ReactiveWeb框架,可用于构建异步、非阻塞、事件驱动的服务,并且具有很强的可扩展性。5通讯消息通讯消息是spring-messaging模块,是Spring4新增的模块,主要职责是为Spring框架集成一些基本的消息传输应用。6集成测试集成测试就是spring-test模块,主要是提供测试支持,可以进行一些集成测试或者其他测试,不需要发布程序到应用服务器或者连接其他设施,这样对任何企业来说都非常重要非常重要。7集成兼容集成兼容是spring-framework-bom模块,主要解决Spring不同模块依赖不同版本的问题。8模块之间的依赖关系Spring官网对Spring5的模块之间的关系有详细的描述,如下图所示。下图对Spring5的各个模块进行了系统的总结,并描述了模块之间的依赖关系,希望对“小伙伴们”有所帮助。本文为《汤姆炸弹建筑》原创,转载请注明出处。科技在于分享,我分享我的快乐!如果本文对您有帮助,请关注并点赞;有什么建议也可以留言或私信。您的支持是我坚持创作的动力。关注微信公众号“汤姆炸弹架构”,获取更多技术干货!
