Spring总共大约有 20个模块,由1300多个不同的文件构成。而这些组件被分别整合在核心容器(CoreContainer)、AOP(Aspect Oriented Programming)和设备支持(Instrmentation)、数据访问及集成(Data Access/Integeration)、Web、报文发送(Messaging)、Test,6个模块集合中。以下是 Spring 5 的模块结构图:
组成Spring框架的每个模块集合或者模块都可以单独存在,也可以一个或多个模块联合实现。每个模块的组成和功能如下:
核心容器
由spring-beans、 spring-core、 spring-context和spring-expression(SpringExpressionLanguage,SpEL) 4个模块组成。spring-core和spring-beans模块是Spring框架的核心模块,包含了控制反转(Inversion ofControl, IOC)和依赖注入(Dependency Injection, DI)。BeanFactory 接口是Spring 框架中的核心接口,它是工厂模式的具体实现。BeanFactory 使用控制反转对应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。但BeanFactory 容器实例化后并不会自动实例化Bean,只有当Bean 被使用时 BeanFactory 容器才会对该 Bean 进行实例化与依赖关系的装配。spring-context模块构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext是该模块的核心接口,她的超类是BeanFactory。与BeanFactory 不同,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使之处于待用状态。spring-context-support 模块是对Spring IOC 容器的扩展支持,以及IOC子容器。spring-context-indexer模块是Spring的类管理组件和Classpath扫描。spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于Spring产品的需求而设计,他可以非常方便地同Spring IOC 进行交互。
各模块之间的依赖关系
Spring官网对Spring5各模块之间的关系也做了详细说明: