Eugen Paraschiv 2024-03-17
1. 概述
本教程介绍了如何通过 Maven 设置 Spring 的依赖项。最新的 Spring 发布版本可以在 Maven Central 上找到。
2. 使用 Maven 配置基本的 Spring 依赖
Spring 被设计为高度模块化的框架——使用 Spring 的某一部分既不需要、也不会强制要求引入其他部分。例如,仅使用基础的 Spring Context 时,并不需要引入 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-core、spring-expression、spring-aop 和 spring-beans。这些依赖增强了容器功能,使其支持一些核心的 Spring 技术:核心工具类、Spring 表达式语言(SpEL)、面向切面编程(AOP)支持以及 JavaBeans 机制。
注意:我们将此依赖定义为
runtime范围(scope),以确保在编译阶段不会依赖任何 Spring 特定的 API。对于更高级的用例,可以对某些选定的 Spring 依赖移除runtime范围;但对于较简单的项目而言,无需在编译时依赖 Spring 即可充分利用该框架的所有功能。
此外,请注意 Spring 5.2 要求最低 Java 版本为 JDK 8,同时也支持当前的 LTS 版本 JDK 11 以及最新的 OpenJDK 版本 JDK 13。
3. 使用 Maven 配置 Spring 持久化依赖
现在我们来看一下 Spring 的持久化相关依赖——主要是 spring-orm:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
该依赖提供了对 Hibernate 和 JPA 的支持(例如 HibernateTemplate 和 JpaTemplate),同时还包含若干与持久化相关的附加依赖:spring-jdbc 和 spring-tx。
其中,JDBC 数据访问库(spring-jdbc)定义了 Spring 对 JDBC 的支持以及 JdbcTemplate,而 spring-tx 则代表了极其灵活的事务管理抽象层。
4. 使用 Maven 配置 Spring MVC
若要使用 Spring 的 Web 和 Servlet 支持,需在 pom.xml 中额外引入以下两个依赖(当然,还需包含前面提到的核心依赖):
<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
关于 Spring Security 的 Maven 依赖配置,请参阅《Spring Security 与 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. 使用里程碑版本(Milestones)
Spring 的正式发布版本托管在 Maven Central 上。然而,如果项目需要使用里程碑版本,则需在 pom.xml 中添加自定义的 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. 使用快照版本(Snapshots)
与里程碑版本类似,快照版本也托管在自定义仓库中:
<repositories>
<repository>
<id>repository.springframework.maven.snapshot</id>
<name>Spring Framework Maven Snapshot Repository</name>
<url>http://repo.spring.io/snapshot/</url>
</repository>
</repositories>
启用 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>
9. 结论
本文讨论了在 Maven 项目中使用 Spring 的实践细节。文中所展示的 Maven 依赖项是其中一些主要的依赖,当然还有其他若干依赖未在此列出。尽管如此,这应该足以作为在项目中使用 Spring 的良好起点。