1. 概述
本教程说明了如何通过Maven设置Spring依赖项,可以在Maven Central上找到最新的Spring版本。
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实用程序、Spring表达式语言(SpEL)、面向切面编程支持和Java Beans机制。
请注意,我们在runtime范围内定义依赖关系,这将确保在任何Spring特定的API上都没有编译时依赖关系。对于更高级的用例,runtime范围可能会从某些选定的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支持,例如HibernateTemplate和JpaTemplate,以及一些额外的、与持久层相关的依赖项:spring-jdbc和spring-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
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. 使用里程碑
Spring的发布(release)版本托管在Maven Central上,但是,如果项目需要使用里程碑(milestone)版本,则需要在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. 使用快照
与里程碑类似,快照(snapshot)托管在自定义仓库中:
<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>
9. 总结
本文讨论将Spring与Maven结合使用的实际细节,这里介绍的Maven依赖项当然是一些主要的依赖项,其他几个可能值得一提但尚未完成。尽管如此,这应该是在项目中使用Spring的一个良好起点。
与往常一样,本教程的完整源代码可在GitHub上获得。