Spring基础构架
约 1877 字大约 6 分钟
2025-11-21
Spring的框架体系
Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需求灵活地创建多种架构。
Spring框架由多个模块组成,应用程序可以根据需要选择所需的模块。其核心是核心容器的各个模块,包括配置模型和依赖注入机制。除此之外,Spring框架还为不同的应用程序架构提供基础支持,包括消息传递、事务数据和持久化以及Web应用。它还包括基于 Servlet 的 Spring MVC Web 框架,以及与之并行的 Spring WebFlux 响应式 Web 框架。
Spring 框架由组织成大约 20 个模块的功能组成。这些模块分为核心容器、数据访问/集成、Web、AOP(面向方面编程)、检测、消息传递和测试,如下图所示。

核心容器
核心容器由 spring-core、spring-beans、spring-context、spring-context-support 和 spring-express(Spring 表达式语言)模块组成。
spring-core 和 spring-beans 模块提供了框架的基本部分,包括 IoC 和依赖注入功能。 BeanFactory 是工厂模式的复杂实现。它消除了对编程单例的需求,并允许您将依赖项的配置和规范与实际的程序逻辑解耦。
Context (spring-context) 模块构建在 Core 和 Beans 模块提供的坚实基础上:它是一种以类似于 JNDI 注册表的框架样式方式访问对象的方法。 Context 模块继承了 Beans 模块的功能,并添加了对国际化(例如使用资源包)、事件传播、资源加载以及通过 Servlet 容器透明创建上下文的支持。 Context 模块还支持 Java EE 功能,例如 EJB、JMX 和基本远程处理。 ApplicationContext 接口是Context 模块的焦点。 spring-context-support 支持将常见的第三方库集成到 Spring 应用程序上下文中,用于缓存(EhCache、Guava、JCache)、邮件(JavaMail)、调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、Velocity)。
spring-expression 模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是 JSP 2.1 规范中指定的统一表达式语言(统一 EL)的扩展。该语言支持设置和获取属性值、属性赋值、方法调用、访问数组、集合和索引器的内容、逻辑和算术运算符、命名变量以及从 Spring 的 IoC 容器中按名称检索对象。它还支持列表投影和选择以及常见的列表聚合。
AOP和检测
spring-aop 模块提供了符合 AOP 联盟标准的面向方面编程实现,允许您定义方法拦截器和切入点等,以干净地解耦实现应分离的功能的代码。使用源级元数据功能,您还可以以类似于 .NET 属性的方式将行为信息合并到代码中。
单独的 spring-aspects 模块提供与 AspectJ 的集成。
spring-instrument 模块提供了类检测支持和类加载器实现,可在某些应用程序服务器中使用。 spring-instrument-tomcat 模块包含 Spring 的 Tomcat 检测代理。
消息传递
Spring Framework 4 包含一个 spring-messaging 模块,其中包含来自 Spring Integration 项目的关键抽象,例如 Message、MessageChannel、MessageHandler 等,作为基于消息传递的应用程序的基础。该模块还包括一组用于将消息映射到方法的注释,类似于基于 Spring MVC 注释的编程模型。
数据访问/集成
数据访问/集成层由 JDBC、ORM、OXM、JMS 和事务模块组成。
spring-jdbc 模块提供了一个 JDBC 抽象层,消除了对数据库供应商特定错误代码进行繁琐的 JDBC 编码和解析的需要。
spring-tx 模块支持实现特殊接口的类和所有 POJO(普通旧 Java 对象)的编程式和声明式事务管理。
spring-orm 模块为流行的对象关系映射 API 提供集成层,包括 JPA、JDO 和 Hibernate。使用 spring-orm 模块,您可以将所有这些 O/R 映射框架与 Spring 提供的所有其他功能结合使用,例如前面提到的简单声明式事务管理功能。
spring-oxm 模块提供了一个抽象层,支持对象/XML 映射实现,例如 JAXB、Castor、XMLBeans、JiBX 和 XStream。
spring-jms 模块(Java 消息服务)包含用于生成和使用消息的功能。从 Spring Framework 4.1 开始,它提供了与 spring-messaging 模块的集成。
Web服务
Web层由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块组成。
spring-web 模块提供基本的面向 Web 的集成功能,例如分段文件上传功能以及使用 Servlet 侦听器和面向 Web 的应用程序上下文初始化 IoC 容器。它还包含一个 HTTP 客户端和 Spring 远程处理支持的与 Web 相关的部分。
spring-webmvc 模块(也称为 Web-Servlet 模块)包含 Spring 的模型-视图-控制器 (MVC) 和 Web 应用程序的 REST Web 服务实现。 Spring 的 MVC 框架在领域模型代码和 Web 表单之间提供了清晰的分离,并与 Spring 框架的所有其他功能集成。
spring-webmvc-portlet 模块(也称为 Web-Portlet 模块)提供在 Portlet 环境中使用的 MVC 实现,并镜像 spring-webmvc 模块的功能。
测试
spring-test 模块支持使用 JUnit 或 TestNG 对 Spring 组件进行单元测试和集成测试。它提供 Spring ApplicationContext 的一致加载和这些上下文的缓存。它还提供了模拟对象,您可以使用它们来单独测试代码。
使用场景
典型的成熟 Spring Web 应用程序
前面描述的构建块使 Spring 在许多场景中成为合理的选择,从在资源受限设备上运行的嵌入式应用程序到使用 Spring 事务管理功能和 Web 框架集成的成熟企业应用程序。

Spring 的声明式事务管理功能使 Web 应用程序完全具有事务性,就像使用 EJB 容器管理事务一样。所有自定义业务逻辑都可以使用简单的 POJO 来实现,并由 Spring 的 IoC 容器进行管理。其他服务包括支持发送电子邮件和独立于 Web 层的验证,使您可以选择在何处执行验证规则。 Spring 的 ORM 支持与 JPA、Hibernate 和 JDO 集成;例如,当使用 Hibernate 时,您可以继续使用现有的映射文件和标准 Hibernate SessionFactory 配置。表单控制器将 Web 层与域模型无缝集成,从而无需使用 ActionForm 或其他将 HTTP 参数转换为域模型值的类。
使用第三方Web框架的Spring中间层

有时情况不允许您完全切换到不同的框架。 Spring 框架并不强迫您使用其中的所有内容;这不是一个全有或全无的解决方案。使用 Struts、Tapestry、JSF 或其他 UI 框架构建的现有前端可以与基于 Spring 的中间层集成,从而允许您使用 Spring 事务功能。您只需使用 ApplicationContext 连接业务逻辑并使用 WebApplicationContext 来集成您的 Web 层。