spring核心框架体系结构

    |     2017年2月21日   |   JavaWeb, spring   |     0 条评论   |    1796

很多人用 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:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.17.RELEASE</version>
</dependency>

Web 工程要上 Spring MVC,也只要一个 spring-webmvc:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.2.17.RELEASE</version>
</dependency>

为什么可以这样配?因为传递依赖会把 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 表达式语言

完整依赖关系:

797930-20161206101318569-352180177

spring-core 依赖了 commons-logging,而其他模块都依赖 spring-core,所以整个 Spring 框架都依赖 commons-logging。若已有 log4j 等实现,可以 exclusion 掉它;没有自己的日志实现却排除 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

aop 包含 4 个模块:

  • spring-aop:面向切面编程
  • spring-aspects:集成 AspectJ
  • spring-instrument:类级工具支持和 ClassLoader 级实现,用于服务器
  • spring-instrument-tomcat:针对 Tomcat 的 instrument 实现

依赖关系:

797930-20161206102118366-1545880227

四、data access

data access 包含 5 个模块:

  • spring-jdbc:JDBC 支持
  • spring-tx:事务控制
  • spring-orm:对象关系映射,集成 ORM 框架
  • spring-oxm:对象 XML 映射
  • spring-jms:Java 消息服务

依赖关系:

797930-20161206102441772-1998211727

五、web

web 包含 4 个模块:

  • spring-web:基础 Web 功能,如文件上传
  • spring-webmvc:MVC 实现
  • spring-webmvc-portlet:基于 Portlet 的 MVC 实现
  • spring-struts:与 Struts 集成,不推荐,Spring 4 不再提供

依赖关系:

797930-20161206102753335-1304605445

六、test 与 context-support

test 本身只有一个模块,这里把图中未画出的 spring-context-support 一并列出:

  • spring-test:Spring 测试,提供 JUnit 与 mock
  • spring-context-support:额外支持包,例如邮件服务、视图解析

依赖关系:

797930-20161206103031929-91169155

看到这些图之后,在 Maven 里配 Spring 3 依赖就不该再胡乱堆 jar 了。

七、Spring 4 多了什么

Spring 4 与 Spring 3 结构基本相同。官网结构图去掉了 Struts,增加了 messaging 和 websocket,其他模块保持不变,因此 Spring 4 一共 20 个 jar。

  • spring-websocket:为 Web 应用提供的高效通信工具
  • spring-messaging:用于构建基于消息的应用程序

依赖关系:

797930-20161206103624788-826654956

转至:http://www.cnblogs.com/ywlaker/p/6136625.html

一句话总结:Maven 只配顶层 artifact(Java 工程 spring-context,Web 工程 spring-webmvc),其余靠传递依赖;先认清 core / aop / data / web / test 五块,再按需 exclusion 日志。

转载请注明来源:spring核心框架体系结构
本文链接地址:https://ai.zhousir.top/?p=1934
回复 取消