引言

Spring官网上明确列出了Spring Framework的几大核心模块,就是这张经典图片:

spring 模块化部署 spring各模块_spring


Spring Framework大概由20个模块组成。这些模块分成以下几组:核心容器(Core Container)、数据访问/数据集成(Data Access/Integration),Web,AOP,工具(Instrumentation),消息(Messaging)和测试(Test)。

下面来逐个分析一下每个模块组的具体内容和作用,组里面子模块的名字和pom文件中导入依赖时的“Artifact ID”对应。

一、核心容器

核心容器包括spring-core, spring-beans, spring-context, spring-context-supportspring-expression (SpEL)模块。

spring-corespring-beans提供了Spring框架的基础组成部分,包括IoC和DI特性。其中的BeanFactory接口采用复杂的工厂方法,使程序员不需要手写单例模式的代码,将配置依赖的工作和编码逻辑工作解耦。

spring-context模块基于core和beans模块,是一种以框架风格访问对象的手段,类似于JNDI1。Context模块继承了Bean模块的特性,并加入了新的功能,用来支持国际化(比如使用资源包)、事件传播、资源加载和上下文创建(比如用Servlet容器)。Context模块还支持Java EE的特性,比如EJB,JMX和基本远程处理(basic remoting)。ApplicationContext接口是Context模块的关键。

spring-context-support模块支持整合常见的第三方库到Spring应用上下文,尤其是缓存类库(EhCahe,JCache)和任务调度类库(CommonJ,Quartz)。

spring-expression模块提供了一种强大的表达式语言,用来查询和操作运行时对象关系(runtime object graph),是unified EL语言(JSP 2.1)的扩展。SpEL功能包括设置和提取属性值,分配属性,调用方法,访问数组的内容,用名字取出IoC容器中的对像等。

二、AOP和工具

spring-aop模块提供了符合AOP Alliance要求的,面向切面的编程实现。例如,您可以定义方法拦截器和切入点,把应该分离出来的功能清晰解耦。利用源码级别的元数据功能,您还可以合并行为信息到代码中,类似于.NET属性的方式。

单独的spring-aspects模块用来整合AspectJ。

spring-instrument模块提供类工具支持和类加载器实现。spring-instrument-tomcat模块包含了Spring内置的Tomcat。

三、消息

Spring 4中新加入了spring-messaging模块,集合了Spring整合项目中Message MessageCannel MessageHandler和其他库的功能,是基于消息应用的基础。模块内还包含一组映射消息和方法的注解(@Header,@MessageMapping,@Payload,@SendTo等),类似基于SpringMVC注解的编码模式。

四、数据访问/集成

数据访问层包括JDBC,ORM,OXM,JMS和事务等模块。

spring-jdbc模块提供JDBC抽象层,省去繁琐的JDBC编码和针对不同数据库提供商的错误代码解析。

spring-tx模块支持编程和声明式事务管理,用于实现特定接口的类和所有的POJO。

spring-orm模块提供流行的对象关系映射API,包括JPA和Hibernate。使用spring-orm模块可以结合Spring其他特性,例如上面提到的声明式事务管理。

spring-oxm模块提供了一个抽象层,支持对象-XML映射,比如JAXB,Castor,JiBX和XStream。

spring-jms(Java Messaging Service)自从Spring 4之后整合到了spring-messaging模块里,它包含一些消息生产和消费的特性。

五、Web

Web层包括spring-web spring-webmvcspring-websocket模块。

spring-web模块提供了基本的面向Web的特色集成,例如文件分块上传功能,以及使用Servlet侦听器和面向Web的应用程序上下文对IoC容器的初始化。

spring-webmvc模块,又叫Web-Servlet模块,包括Spring的MVC和Rest风格网络应用程序的实现。Spring的MVC框架清晰地分隔了模型代码和网络表单,并与Spring框架所有其他功能集成在一起。

六、测试

spring-test模块支持Spring组件的单元测试和集成测试,采用JUnit或TestNG。它提供了ApplicationContexts的一致加载以及这些上下文的缓存,还提供了可用户单元测试代码的模拟对象。


  1. JNDI(Java Name and Directory Interface),Java命名和目录接口,是SUN公司提供的一种标准Java命名系统接口。 ↩︎