Spring 总共大约有 20 个模块,由 1300 多个不同的文件构成。
而这些组件被分别整合在
核心容器 (Core Container),
AOP(Aspect Oriented Programming),
设备支持(Instrumentation),
数据访问及集成(Data Access/Integeration)- JDBC, ORM, JMS, Transactions,
Web - WebMVC, WebSocket,
报文发送(Messaging),
Test,这6个模块集合中。
以下是 Spring 5 的模块结构图:
Spring设计理念:
Spring 框架中的核心组件有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。
Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就像没有面向对象编程,Spring 中没有 Bean 也就没有 Spring 存在的意义。
Bean:包装Object和数据。像演出中的演员。
Context:发现bean之间关系,Context是Bean的关系集合,IoC容器。像演出中的舞台。
Core:就是发现、建立和维护每个bean之间关系的一些工具,像Util工具包。像演出中的道具。
Bean组件:
Bean 组件在 Spring 的 org.springframework.beans 包下。这个包下的所有类主要解决了三件事:Bean 的定义、Bean 的创建以及对 Bean 的解析。
Spring Bean 的创建时典型的工厂模式,它的顶级接口是 BeanFactory。
Bean的定义:就是完整的描述了在Spring的配置文件中你定义的 <bean/> 节点中所有的信息,包括各种子节点。
当Spring成功解析你定义的一个<bean/>节点后,在Spring的内部就被转化成BeanDefinition对象。以后所有的操作都是对这个对象完成的。
Context组件:
Context 在 Spring 的 org.springframework.context 包下,它实际上就是给 Spring 提供一个运行时的环境,用以保存各个对象的状态。
ApplicationContext 是 Context 的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了几个接口,主要是扩展了 Context 的功能。
总体来说 ApplicationContext 必须要完成以下几件事:
- 标识一个应用环境
- 利用 BeanFactory 创建 Bean 对象
- 保存对象关系表
- 能够捕获各种事件
Context作为Spring 的Ioc容器,基本上整合了Spring 的大部分功能的基础。
Core组件:
Core 组件作为 Spring 的核心组件,他其中包含了很多的关键类,其中一个重要组成部分就是定义了资源的访问方式。
Resource接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。
Context是把资源的加载、解析和描述工作委托给了 ResourcePatternResolver 类来完成,他把资源的加载、解析和资源的定义整合在一起便于其他组件使用。