Spring总共大约有 20个模块,由 1300多个不同的文件构成。而这些组件被分别整合在核心容器(Core Container)、AOP(Aspect Oriented Programming)、Aspects和设备支持(Instrmentation)、数据访问及集成(Data Access/Integeration)、Web、报文发送(Messaging)、Test,8个模块集合中。以下是 Spring 5 的模块结构图
组成Spring框架的每个模块集合、模块都可以单独存在,以下有一些比较关键和基础的功能:
一、Core Container(核心容器)
- Core Container(核心容器): 主要由spring-beans、spring-core、spring-context和spring-expresion(包括spring-expresion language,sqEL) 4个模块组成。
看源码可以知道前两个模块包含了控制反转和依赖注入。而我们的IOC容器中最主要的BeanFactory接口,是工厂模式的具体实现,它使用控制反转对应用程序的配置和依赖性规范与实际代码进行分离,它实例化后不会主动实例化Bean,只有当Bean被使用时,才会对该Bean进行实例化和注入相关的依赖。
spring-context模块是架构在核心模块上,拓展了BeanFactory,会为他添加Bean生命周期的控制、框架的事件相关等功能,还提供了许多功能的支持,包括邮件访问、任务调度等,,ApplicationContext 是该模块的核心接口,她是BeanFactory 的超类,与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例Bean 进行实例化与依赖关系的装配,使之处于待用状态。
spring-expression 模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL。
单独模块
1、spring-aop
1.spring-aop相关的功能始由spring-aop、spring-aspects 和spring-instrument 3 个模块组成。spring-aop 是Spring 的另一个核心模块,是AOP 主要的实现模块。
在Spring 中,他是以jdk的动态代理技术为基础,然后设计出了一系列的AOP 横切实现,比如前置通知、返回通知、异常通知等,同时,
Pointcut 接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。
2、spring-aspects
spring-aspects 模块集成自AspectJ 框架,主要是为Spring AOP 提供多种AOP 实现方法。
3、spring-instrument
spring-instrument 模块是基于JAVA SE 的"java.lang.instrument"进行设计的,应该算是AOP 的一个支援模块,主要作用是在JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP 的功能。
4、Message
报文发送:即spring-messaging 模块。spring-messaging 是从Spring4 开始新加入的一个模块,主要职责是为Spring 框架集成一些基础的报文传送应用。
数据访问及集成模块
-
spring-jdbc 模块是Spring 提供的JDBC 抽象框架的主要实现模块,用于简化Spring JDBC。主要是提供JDBC 模板方式、关系数据库对象化方式、SimpleJdbc 方式、事务管理来简化JDBC 编程,主
要实现类是JdbcTemplate、SimpleJdbcTemplate 以及NamedParameterJdbcTemplate。 -
spring-tx 模块是Spring JDBC 事务控制实现模块。
-
spring-orm 模块是ORM 框架支持模块,主要集成Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略。
-
spring-jms 模块(Java Messaging Service)能够发送和接受信息,自Spring Framework 4.1以后,他还提供了对spring-messaging 模块的支撑。
Web模块集合
由spring-web、spring-webmvc、spring-websocket 和spring-webflux 4 个模块组成。
- spring-web 模块为Spring 提供了最基础Web 支持,主要建立于核心容器之上,通过Servlet 或者Listeners 来初始化IOC 容器,也包含一些与Web 相关的支持。
2.spring-webmvc 模块众所周知是一个的Web-Servlet 模块, 实现了Spring MVC(model-view-Controller)的Web 应用。
3.spring-websocket 模块主要是与Web 前端的全双工通讯的协议。
- spring-webflux 是一个新的非堵塞函数式Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。
Test:即spring-test 模块。
spring-test 模块主要为测试提供支持的。
以下为各个模块之间的依赖关系:
网友评论