zoukankan      html  css  js  c++  java
  • spring framework核心框架体系结构(转载)

    作者:Dreawer

    很多人都在用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”,另外,“instrumentation”有两个jar,还有一个“spring-context-support”图中没有列出,所以spring3的jar包一共是19个

    下面介绍这5个部分的jar以及依赖关系

    core

    core部分包含4个模块

    spring-core依赖注入IoC与DI的最基本实现
    spring-beansBean工厂与bean的装配
    spring-contextspring的context上下文即IoC容器
    spring-expressionspring表达式语言
    

    它们的完整依赖关系

    因为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

    aop部分包含4个模块

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

    它们的依赖关系

    data access

    data access部分包含5个模块

    spring-jdbcjdbc的支持
    spring-tx事务控制
    spring-orm对象关系映射集成orm框架
    spring-oxm对象xml映射
    spring-jmsjava消息服务
    

    它们的依赖关系

    web

    web部分包含4个模块

    spring-web基础web功能如文件上传
    spring-webmvcmvc实现
    spring-webmvc-portlet基于portlet的mvc实现
    spring-struts与struts的集成不推荐spring4不再提供
    

    它们的依赖关系

    test

    test部分只有一个模块,我将spring-context-support也放在这吧

    spring-testspring测试提供junit与mock测试功能
     
    spring-context-supportspring额外支持包比如邮件服务视图解析等
    

    它们的依赖关系

    到这里spring3的结构就介绍完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了,spring与spring mvc中集成其他技术的详细配置可以参考我这边文章spring与spring mvc集成多种技术构建复杂工程

    下面介绍spring4的结构,spring4与spring3基本相同,下面是官网给出的结构图

    可以看到,图中去掉了spring3的struts,添加了messaging和websocket,其他模块保持不变,因此,spring4的jar有20个

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

    它们的依赖关系

    ‘真实的’活着
  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/chenxi-hxl/p/9641645.html
Copyright © 2011-2022 走看看