[TOC]
犹豫很久,终于鼓起勇气开始梳理 spring 的体系。
1. 什么是 springframework?
先来看看 wiki 的解释
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,并且Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。
官方文档的解释更明确些:
Spring 框架是一个Java平台,它为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此您可以专注于应用程序的开发。Spring可以让您从“plain old Java objects”(POJO)中构建应用程序和通过非侵入性的POJO实现企业应用服务。此功能适用于Java SE的编程模型,全部的或部分的适应Java EE模型。
综上,我们知道 spring 是 springframework 的简称,它帮助开发者快速完成开发中的通用步骤,开发者只需要关注与应用开发相关的部分,大大的提高了开发效率。
Spring 能帮我们做什么?
- 用简单方法来管理数据库事务
- 用本地 Java 方法来远程调用
- 用本地 Java 方法实现管理操作,来代替 JMX APIs
- 用本地 Java 方法实现消息处理,来代替 JMS APIs
2. springframework 包括哪些模块
2.1 框架
官网上能找到的最早的 spring 框架图如下
spring1.1.2 框架图

这就是流传最广的 7 大模块的出处了。现在 spring 已经发展到了 spring5,模块的划分进行了调整,已经和第一版有些调整了。
Spring5 框架图

那么我们直接来看新的版本。
2.2 模块
在 spring5 中,Spring 框架的功能被有组织的分散到约 20 个模块中。这些模块分布在核心容器(Core Container,),数据访问/集成(Data Access/Integration),Web,AOP(Aspect Oriented Programming,面向切面 的编程),植入(Instrumentation),消息传输(Messaging)和测试(Test)7 个项目中。
下面对每个模块进行一一介绍(来自官网文档的中文版搬运)
2.2.1 核心容器 Core Container
由 spring-core
, spring-beans
,spring-context
,spring-context-support
,和 spring-expression
(Spring 表达式语言)组成。
-
spring-core
和spring-beans
模块提供了框架的基础功能,包括 IOC 和依赖注入功能。 BeanFactory 是一个成熟的工厂模式的实现。你不再需要编程去实现单例模式,允许你把依赖关系的配置和描述从程序逻辑中解耦。 -
上下文(
spring-context
)模块建立在由 Core 和 Beans 模块提供的坚实的基础上:它提供一个框架式的对象访问方式,类似于一个 JNDI 注册表。上下文模块从 Beans 模块继承其功能,并添加支持国际化(使用,例如,资源集合),事件传播,资源负载,并且透明创建上下文,例如,Servlet 容器。Context 模块还支持 Java EE 的功能,如 EJB,JMX 和基本的远程处理。ApplicationContext 接口是 Context 模块的焦点。spring-context-support
支持整合普通第三方库到 Spring 应用程序上下文,特别是用于高速缓存(ehcache,JCache)和调度(CommonJ,Quartz)的支持。 -
spring-expression
模块提供了强大的表达式语言去支持查询和操作运行时对象图。这是对 JSP 2.1 规范中规定的统一表达式语言(unified EL)的扩展。该语言支持设置和获取属性值,属性分配,方法调用,访问数组,集合和索引器的内容,逻辑和算术运算,变量命名以及从 Spring 的 IoC 容器中以名称检索对象。 它还支持列表投影和选择以及常见的列表聚合。
2.2.2 AOP 和 Instrumentation
spring-aop
模块提供了一个符合 AOP 联盟(要求)的面向方面的编程实现,例如,允许您定义方法拦截器和切入点(pointcuts),以便干净地解耦应该被分离的功能实现。 使用源级元数据(source-level metadata)功能,您还可以以类似于.NET 属性的方式将行为信息合并到代码中。
单独的 spring-aspects
模块,提供了与 AspectJ 的集成。
spring-instrument
模块提供了类植入(instrumentation)支持和类加载器的实现,可以应用在特定的应用服务器中。该 spring-instrument-tomcat
模块包含了支持 Tomcat 的植入代理。
2.2.3 消息(Messaging)
Spring 框架 4 包括 spring-messaging
(消息传递模块),其中包含来自 Spring Integration
的项目,例如,Message
,MessageChannel
,MessageHandler
,和其他用来传输消息的基础应用。该模块还包括一组用于将消息映射到方法的注释(annotations),类似于基于 Spring MVC 注释的编程模型。
2.2.4 数据访问/集成(Data Access/Integration)
数据访问/集成层由 JDBC,ORM,OXM,JMS 和事务模块组成。
spring-jdbc
模块提供了一个 JDBC –抽象层,消除了需要的繁琐的 JDBC 编码和数据库厂商特有的错误代码解析。spring-tx
模块支持用于实现特殊接口和所有 POJO(普通 Java 对象)的类的编程和声明式事务 管理。spring-orm
模块为流行的对象关系映射(object-relational mapping )API 提供集成层,包括 JPA 和 Hibernate。使用spring-orm
模块,您可以将这些 O / R 映射框架与 Spring 提供的所有其他功能结合使用,例如前面提到的简单声明性事务管理功能。spring-oxm
模块提供了一个支持对象/ XML 映射实现的抽象层,如 JAXB,Castor,JiBX 和 XStream。spring-jms
模块(Java Messaging Service) 包含用于生产和消费消息的功能。自 Spring Framework 4.1 以来,它提供了与spring-messaging
模块的集成。
2.2.5 Web
Web 层由 spring-web
,spring-webmvc
和 spring-websocket
模块组成。
spring-web
模块提供基本的面向 Web 的集成功能,例如多部分文件上传功能,以及初始化一个使用了 Servlet 侦听器和面向 Web 的应用程序上下文的 IoC 容器。它还包含一个 HTTP 客户端和 Spring 的远程支持的 Web 相关部分。spring-webmvc
模块(也称为 Web-Servlet 模块)包含用于 Web 应用程序的 Spring 的模型-视图-控制器(MVC)和 REST Web Services 实现。Spring 的 MVC 框架提供了领域模型代码和 Web 表单之间的清晰分离,并与 Spring Framework 的所有其他功能集成。
2.2.6 测试(Test)
spring-test
模块支持使用 JUnit 或 TestNG 对 Spring 组件进行单元测试和 集成测试。它提供了 Spring ApplicationContexts 的一致加载和这些上下文的缓存。它还提供可用于独立测试代码的模仿(mock)对象。
2.3 总结
spring 的核心依然是 core
、bean
和 context
三个组件。它们实现了 spring 非常核心的功能:依赖注入和控制反转,这个功能可以将对象之间的依赖关系用配置文件管理起来。这三个组件构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。
后面的文章中,我们会先从这三个模块入手,对 spring 进行介绍和分析。
参考文档
wiki 百科
https://zh.wikipedia.org/wiki/Spring_Framework
官方文档
https://docs.spring.io/spring/docs/5.0.0.M5/spring-framework-reference/html/overview.html
中文版
https://lfvepclr.gitbooks.io/spring-framework-5-doc-cn/content/2/2.html
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于