spring核心框架体系结构
很多人用 Spring 开发 Java 项目,配 Maven 时却说不清该引哪些 jar,常常是报错再补、补完更乱,下次建同类工程只能整份拷贝。其实 Spring 3 的 jar 大约 19 个,每个都有明确职责,一个 jar 还会传递依赖若干其他 jar。把关系理清,Maven 只要写顶层那一个即可。
下面以 3.2.17.RELEASE 为例看 Spring 3 结构;Spring 4 稍有不同,放在最后。groupId 一律是 org.springframework,差别只在 artifactId。图中没画出 spring-context-support,instrumentation 对应两个 jar。
一、最短依赖怎么写
普通 Java 工程用 Spring,通常只要一个 spring-context:
Web 工程要上 Spring MVC,也只要一个 spring-webmvc:
为什么可以这样配?因为传递依赖会把 core / beans / context / web 等下层 jar 一并拉进来。官网给出的 Spring 3 结构图把框架分成 5 块:core、aop、data access、web、test。

| 部分 | 主要 jar | 干什么 |
|---|---|---|
| core | core / beans / context / expression | IoC、Bean、容器、表达式 |
| aop | aop / aspects / instrument* | 切面与字节码增强 |
| data access | jdbc / tx / orm / oxm / jms | 数据访问与事务 |
| web | web / webmvc / portlet / struts | Web 与 MVC |
| test | test(另加 context-support) | 测试与邮件、视图等扩展 |
二、core
core 包含 4 个模块:
-
spring-core:依赖注入 IoC 与 DI 的最基本实现 -
spring-beans:Bean 工厂与 bean 的装配 -
spring-context:Spring 的 context 上下文,即 IoC 容器 -
spring-expression:Spring 表达式语言
完整依赖关系:
spring-core 依赖了 commons-logging,而其他模块都依赖 spring-core,所以整个 Spring 框架都依赖 commons-logging。若已有 log4j 等实现,可以 exclusion 掉它;没有自己的日志实现却排除 commons-logging,编译会报错。
三、aop
aop 包含 4 个模块:
-
spring-aop:面向切面编程 -
spring-aspects:集成 AspectJ -
spring-instrument:类级工具支持和 ClassLoader 级实现,用于服务器 -
spring-instrument-tomcat:针对 Tomcat 的 instrument 实现
依赖关系:
四、data access
data access 包含 5 个模块:
-
spring-jdbc:JDBC 支持 -
spring-tx:事务控制 -
spring-orm:对象关系映射,集成 ORM 框架 -
spring-oxm:对象 XML 映射 -
spring-jms:Java 消息服务
依赖关系:
五、web
web 包含 4 个模块:
-
spring-web:基础 Web 功能,如文件上传 -
spring-webmvc:MVC 实现 -
spring-webmvc-portlet:基于 Portlet 的 MVC 实现 -
spring-struts:与 Struts 集成,不推荐,Spring 4 不再提供
依赖关系:
六、test 与 context-support
test 本身只有一个模块,这里把图中未画出的 spring-context-support 一并列出:
-
spring-test:Spring 测试,提供 JUnit 与 mock -
spring-context-support:额外支持包,例如邮件服务、视图解析
依赖关系:
看到这些图之后,在 Maven 里配 Spring 3 依赖就不该再胡乱堆 jar 了。
七、Spring 4 多了什么
Spring 4 与 Spring 3 结构基本相同。官网结构图去掉了 Struts,增加了 messaging 和 websocket,其他模块保持不变,因此 Spring 4 一共 20 个 jar。

-
spring-websocket:为 Web 应用提供的高效通信工具 -
spring-messaging:用于构建基于消息的应用程序
依赖关系:
转至:http://www.cnblogs.com/ywlaker/p/6136625.html
一句话总结:Maven 只配顶层 artifact(Java 工程 spring-context,Web 工程 spring-webmvc),其余靠传递依赖;先认清 core / aop / data / web / test 五块,再按需 exclusion 日志。
转载请注明来源:spring核心框架体系结构













