Contents

Spring 与 Maven

1.概述

本教程说明了如何通过 Maven 设置Spring 依赖项。可以在Maven Central 上找到最新的 Spring 版本。

2. Maven 的基本 Spring 依赖

Spring 被设计为高度模块化——使用 Spring 的一部分不应该也不需要另一部分。例如,基本的 Spring 上下文可以没有 Persistence 或 MVC Spring 库。

让我们从一个基本的Maven 设置开始,它只使用spring-context依赖

<properties>
    <org.springframework.version>5.2.8.RELEASE</org.springframework.version>
</properties>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework.version}</version>
    <scope>runtime</scope>
</dependency>

这种依赖关系——spring-context——定义了实际的 Spring 注入容器,并且有少量的依赖关系:spring-corespring-expressionspring-aopspring-beans这些通过启用对一些核心 Spring 技术的支持来增强容器:核心 Spring 实用程序、Spring 表达式语言 (SpEL)、面向方面的编程 支持和JavaBeans 机制

请注意,我们runtime scope定义依赖关系——这将确保没有对任何 Spring 特定 API 的编译时依赖关系。对于更高级的用例,runtime scope可能会从某些选定的 Spring 依赖项中移除,但对于更简单的项目,无需针对 Spring 进行编译以充分利用该框架。 另请注意,JDK 8 是 Spring 5.2 所需的最低 Java 版本。它还支持 JDK 11 作为当前的 LTS 分支和 JDK 13 作为最新的 OpenJDK 版本。

3. 使用 Maven 进行 Spring 持久化

现在让我们看看持久化 Spring 依赖项——主要是spring-orm

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${org.springframework.version}</version>
</dependency>

这附带了 Hibernate 和 JPA 支持——例如HibernateTemplateJpaTemplate——以及一些额外的、与持久性相关的依赖项:spring-jdbcspring-tx

JDBC 数据访问库定义了Spring JDBC 支持 以及JdbcTemplate,而spring-tx代表了极其灵活的事务管理抽象

4. 使用 Maven 的 Spring MVC

要使用 Spring Web 和 Servlet 支持,除了上面的核心依赖项之外,还需要在pom中包含两个依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${org.springframework.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${org.springframework.version}</version>
</dependency>

spring-web依赖项包含用于 Servlet 和 Portlet 环境的通用 Web 特定实用程序,而spring-webmvc启用对 Servlet 环境的MVC 支持

由于spring-webmvc具有spring-web作为依赖项,因此在使用spring-webmvc时不需要显式定义spring-web。 从 Spring 5.0 开始,为了支持 reactive-stack web 框架,我们可以添加对Spring WebFlux 的依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webflux</artifactId>
    <version>${org.springframework.version}</version>
</dependency>

5. 使用 Maven 的 Spring Security

Security Maven 依赖项在Spring Security with Maven 文章中进行了深入讨论。

6. 使用 Maven 进行Spring测试

可以通过以下依赖项将 Spring 测试框架包含在项目中:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    <scope>test</scope>
</dependency>

使用 Spring 5,我们也可以执行并发测试

7. 使用里程碑

Spring 的发布版本托管在 Maven Central 上。但是,如果项目需要使用里程碑版本,则需要在 pom 中添加自定义 Spring 存储库:

<repositories>
    <repository>
        <id>repository.springframework.maven.milestone</id>
        <name>Spring Framework Maven Milestone Repository</name>
        <url>http://repo.spring.io/milestone/</url>
    </repository>
</repositories>

一旦定义了这个存储库,项目就可以定义依赖关系,例如:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.0-M1</version>
</dependency>

8. 使用快照

与里程碑类似,快照托管在自定义存储库中:

<repositories>
    <repository>
        <id>repository.springframework.maven.snapshot</id>
        <name>Spring Framework Maven Snapshot Repository</name>
        <url>http://repo.spring.io/snapshot/</url>
    </repository>
</repositories>

在 pom.xml 中启用 SNAPSHOT 存储库后,可以引用以下依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.0.3.BUILD-SNAPSHOT</version>
</dependency>

以及 - 对于 5.x:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.3.0-SNAPSHOT</version>
</dependency>