架构图
* Spring约20个模块, 1300多个不同文件;
* Spring中每个模块都可以单独存在;
* 6大模块集合:
* 核心容器: Core Container
* AOP和设备支持(Instrmentation)
* 数据访问/继承: Data Access/Integeration
* web
* 报文发送: Messaging
* Test
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44398e7b2ca1bd4337bbc0f726df8ae5.png)
核心容器
* spring-beans、spring-core、spring-context、spring-expression
- spring-core , spring-beans
* 是Spring框架的核心模块;
* 包含了控制反转(IOC)和依赖注入(DI)
* 核心借口BeanFactory:
* Spring框架的核心接口;(BOP概念的引入)
* 是工厂模式的具体实现;
* BeanFactory容器实例化后, 并不会直接装配Bean;
* 当Bean被使用时, BeanFactory会实例化Bean, 并根据依赖装配Bean;
* 架构于核心模块之上;
* 扩展了BeanFactory:
* 添加了Bean生命周期,框架事件,资源加载透明化;
* 提供企业级支持:
* 邮件访问, 远程访问, 任务调度等;
* 核心接口: ApplicationContext:
* 是BeanFactory的超类;
* 与BeanFactory不同, ApplicationContext容器初始化后, 就会创建Bean实例, 并根据bean依赖进行装配;
* 封装后, 保存在IOC容器中, 待用状态;
* spring-context-support:
* 对IOC容器的扩展支持;
* spring-context-indexer
* 类管理组件和Classpath扫描;
* spring-expression:
* 模块统一表达式语言的扩展模块(EL)的扩展模块;
* 可以查询和操作运行中的对象; 为和IOC容器交互提供便利;
AOP和设备支持
spring-aop、spring-aspects 和 spring-instrument
* 是spring的另一个核心模块;
* 基于JVM动态代理技术:
* 定义了spring实现AOP规则:
* 用户可根据规则, 制定自己的切面和增强;
* 并提供了一系列实现;
* 比如事物, 日志等;
* 集成AspectJ框架;
* 为Spring AOP提供多种AOP实现方案;
* 是基于 JAVA SE 中的"java.lang.instrument"进行设计的;
* 属于AOP的一个支援模块, 提供了动态代理时生成字节码文件的技术;
数据访问与集成
spring-jdbc、spring-tx、spring-orm、spring-jms、spring-oxm
* 提供了jdbc简单实现, jdbc模板, 事物管理(spring-tx)等技术;
* 用以简化jdbc编程;
* 是spring-jdbc的事物控制实现模块;
* 利用AOP技术, 对事物做了一个很好的封装;
* 是ORM框架支持模块;(Hibernate)
* 主要用于:
* 资源管理;
* 数据访问;
* 事物;
* 是OXM(Object-to-XML-Mapping)的支持模块:
* 将java对象映射成xml数据;
* 比如: JAXB, Castor, XMLBeans, JiBX 和 XStream 等
* 发送和接收消息模块;
* 用来连接数据库;(目前的猜测)
* spring4.1后, 还提供了对spring-message模块的支撑;
web组件
spring-web、spring-webmvc、spring-websocket、spring-webflux
* 为spring提供基础web支持;
* 建立于spring核心容器之上;
* 通过Servlet或Listener来初始化IOC容器;
* spring提供的一个web应用;
* 是一个web-servlet模块;
* spring提供的一个websocket应用;
* websocket是一个全双工协议;
* spring自己建立的Reactive Web架构; (响应式web)
* 不依赖servlet, 自身提供web方案;
* 特点:
* 异步, 非阻塞, 事件驱动;
* 扩展性非常好;
通信报文
* spring-message模块;
* 为spring提供基础报文传输应用;
集成测试
* spring-test, 提供测试支持;
集成兼容
* spring-framework-bom模块;
* 解决spring不同模块依赖版本不同问题;
各模块之间依赖关系
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/bcee5e863889aeb4df479099ef41f2a5.png)