很多人都在用 spring 开发 java 项目,但是配置 maven 依赖的时候并不能明确要配置哪些 spring 的 jar,经常是胡乱添加一堆,编译或运行报错就继续配置 jar 依赖,导致 spring 依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些 spring 的依赖,只有拷贝,其实,当初我就是这么干的!
spring 的 jar 包只有 20 个左右,每个都有相应的功能,一个 jar 还可能依赖了若干其他 jar,所以,搞清楚它们之间的关系,配置 maven 依赖就可以简洁明了,下面举个例子,要在普通 java 工程使用 spring 框架,需要哪些 jar 呢?只要一个
- <dependency>
- <groupId>
- org.springframework
- </groupId>
- <artifactId>
- spring-context
- </artifactId>
- <version>
- 3.2.17.RELEASE
- </version>
- </dependency>
那要在 web 工程中引入 spring mvc 呢?也只要配置一个依赖
- <dependency>
- <groupId>
- org.springframework
- </groupId>
- <artifactId>
- spring-webmvc
- </artifactId>
- <version>
- 3.2.17.RELEASE
- </version>
- </dependency>
为什么可以这样配置?接下来我们以 spring 3.2.17.RELEASE 版本为例,介绍 spring 框架结构,spring 4 稍有不同,将在最后介绍
spring 官网给出了一张 spring3 的结构图
图中将 spring 分为 5 个部分:core、aop、data access、web、test,图中每个圆角矩形都对应一个 jar,如果在 maven 中配置,所有这些 jar 的 "groupId" 都是 "org.springframework",每个 jar 有一个不同的 "artifactId",一共 17 个 jar,还有一个 "spring-context-support" 图中没有列出,所以 spring3 的 jar 包一共是 18 个
下面介绍这 5 个部分的 jar 以及依赖关系
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,可以排除对 commons-logging 的依赖,没有日志实现而排除了 commons-logging 依赖,编译报错
- <dependency>
- <groupId>
- org.springframework
- </groupId>
- <artifactId>
- spring-context
- </artifactId>
- <version>
- 3.2.17.RELEASE
- </version>
- <exclusions>
- <exclusion>
- <groupId>
- commons-logging
- </groupId>
- <artifactId>
- commons-logging
- </artifactId>
- </exclusion>
- </exclusions>
- </dependency>
aop 部分包含 4 个模块
- spring - aop:面向切面编程spring - aspects:集成AspectJ spring - instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器spring - instrument - tomcat:针对tomcat的instrument实现
它们的依赖关系
data access 部分包含 5 个模块
- spring - jdbc:jdbc的支持spring - tx:事务控制spring - orm:对象关系映射,集成orm框架spring - oxm:对象xml映射spring - jms:java消息服务
它们的依赖关系
web 部分包含 4 个模块
- spring - web:基础web功能,如文件上传spring - webmvc:mvc实现spring - webmvc - portlet:基于portlet的mvc实现spring - struts:与struts的集成,不推荐,spring4不再提供
它们的依赖关系
test 部分只有一个模块,我将 spring-context-support 也放在这吧
- spring - test:spring测试,提供junit与mock测试功能spring - context - support:spring额外支持包,比如邮件服务、视图解析等
它们的依赖关系
到这里 spring3 的结构就介绍完了,看着这些图我相信你在 maven 中配置 spring 依赖时不会再混乱了,spring 与 spring mvc 中集成其他技术的详细配置可以参考我这边文章
下面介绍 spring4 的结构,spring4 与 spring3 基本相同,下面是官网给出的结构图
可以看到,图中去掉了 spring3 的 struts,添加了 messaging 和 websocket,其他模块保持不变
- spring - websocket:为web应用提供的高效通信工具spring - messaging:用于构建基于消息的应用程序
它们的依赖关系
来源: http://www.cnblogs.com/ywlaker/p/6136625.html