Spring -- 依赖管理

翻译 2016年12月01日 19:11:15

依赖管理和命名约定

依赖管理和依赖注入是两回事。要集成依赖注入功能的话,需要在运行时或编译时把所有lib(jar)放进classpath。这些依赖不是注入的虚拟组件,而是文件系统中的物理资源。依赖管理包括 找到这些资源,存储它们以及把它们添加到classpaths中。依赖可以是直接的(在运行时依赖Spring),也可以是间接的(依赖的commons-dhcp本身是依赖于commons-pool的),间接的依赖也叫做“transitive”,而且这些依赖不好识别和管理。

用Spring的话需要把相关的jar放在项目中,我们可以用速记的命名方式 spring-*spring-*.jar* 表示模块的简称(比如spring-corespring-webmavcspring-jms)。

每个Spring框架的release版本都会发布到Maven Central仓库和 Spring Maven仓库。
-

Maven依赖管理

如果使用Maven作为依赖管理,你不需要显示地提供logging依赖,比如,创建一个application context 并使用依赖注入配置一个应用,Maven的依赖配置如下:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.0.M3</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

注意,如果不想在编译时就注入的话,也可以在运行时声明这个依赖。
上面的这个例子使用的是Maven Central仓库,如果使用Spring Maven仓库的话,需要指定仓库的位置,下面是完全release的:

<repositories>
    <repository>
        <id>io.spring.repo.maven.release</id>
        <url>http://repo.spring.io/release/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

下面是milestones的:

<repositories>
    <repository>
        <id>io.spring.repo.maven.milestone</id>
        <url>http://repo.spring.io/milestone/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

下面是snapshot的:

<repositories>
    <repository>
        <id>io.spring.repo.maven.snapshot</id>
        <url>http://repo.spring.io/snapshot/</url>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>

Maven “Bill of Materials”依赖

使用Maven可以混合不同版本的Spring Jar包。比如你的第3方类库或者另一个Spring工程,引用的是一个老版本的release,如果忘记了显式地声明一个直接依赖,可能会出问题。
解决办法是支持一个叫做“Bill of Materials”概念的依赖,在dependencyManagement 字段中导入 spring-framework-bom,确保所有spring依赖都是同样的版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>5.0.0.M3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

用BoM的另外一个好处是:依赖Spring框架时你不再需要指定< version > 属性。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>

Gradle依赖管理

要在Gradle构建项目时使用Spring仓库时,这样:

repositories {
    mavenCentral()
    // and optionally...
    maven { url "http://repo.spring.io/release" }
}

也可以把 release 换成 milestonesnapshot,在仓库指定好后,就可以声明依赖了:

dependencies {
    compile("org.springframework:spring-context:5.0.0.M3")
    testCompile("org.springframework:spring-test:5.0.0.M3")
}

使用zip压缩包本地依赖

虽然使用构建系统的依赖管理是推荐方式,也可以把依赖包下载到本地。依赖包都在Spring Maven Repository中,http://repo.spring.io/release/org/springframework/spring

spring依赖关系的管理和注入方式

依赖关系的管理spring一个重要的功能就是IOC(IOC容器提供了很多功能,这里只看相关部分),它要完成这个功能必须知道自己管理的被依赖对象和依赖对象之间的对应关系。这种依赖关系的信息形式可以是文本...
  • sinat_31168349
  • sinat_31168349
  • 2017年02月13日 11:37
  • 269

Spring的四种依赖方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程...
  • wangjuan_01
  • wangjuan_01
  • 2016年06月15日 10:45
  • 672

Spring的四种依赖方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程...
  • wangjuan_01
  • wangjuan_01
  • 2016年06月15日 10:45
  • 672

采用Spring管理Bean和依赖注入

http://www.blogjava.net/stevenjohn/archive/2012/08/20/385846.html 1.实例化spring容器 和 从容器获取Bean对象 实...
  • bluetjs
  • bluetjs
  • 2016年07月28日 18:27
  • 1447

Spring之依赖配置详解

通过以上的学习,对spring容器和DI的概念应该比较清晰了,DI(依赖注入)作为spring的核心,spring当然提供了一套完善的机制来进行依赖注入。前篇文章从概念上介绍了依赖注入,本篇着重学习s...
  • windsunmoon
  • windsunmoon
  • 2015年03月02日 16:31
  • 2898

pom.xml添加spring依赖,统一管理版本

UTF-8 4.1.7.RELEASE org.springframework spring-core ${spring.version} ...
  • qq_32257215
  • qq_32257215
  • 2017年05月28日 09:50
  • 1406

Spring IOC源码详解之容器依赖注入

Spring IOC源码详解之容器依赖注入 上一篇博客中介绍了IOC容器的初始化,通过源码分析大致了解了IOC容器初始化的一些知识,先简单回顾下上篇的内容 载入bean定义...
  • yujin753
  • yujin753
  • 2015年07月27日 08:52
  • 2865

强制统一引入的依赖管理BOM

Maven Spring BOM (bill of materials) 为了防止用Maven管理Spring项目时,不同的项目依赖了不同版本的Spring,可以使用Maven BOM来解决...
  • wynwdblh
  • wynwdblh
  • 2017年05月13日 23:33
  • 218

Spring中bean之间的依赖关系depends-on

1:xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springfr...
  • pangqiandou
  • pangqiandou
  • 2016年11月20日 12:32
  • 1233

maven依赖的版本管理

使用变量进行管理 定义一个版本号的变量 4.3.7.REALEASE 所有spring的jar版本都使用变量来定义版本: org.springframework spring...
  • hj7jay
  • hj7jay
  • 2017年03月08日 09:35
  • 611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring -- 依赖管理
举报原因:
原因补充:

(最多只允许输入30个字)