返回介绍

2.2.1 指定基于功能的依赖

发布于 2025-04-21 21:10:06 字数 2034 浏览 0 评论 0 收藏

Spring Boot 通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个 Maven 项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或某类功能。

举例来说,你打算把这个阅读列表应用程序做成一个 Web 应用程序。与其向项目的构建文件里添加一堆单独的库依赖,还不如声明这是一个 Web 应用程序来得简单。你只要添加 Spring Boot 的 Web 起步依赖就好了。

我们还想以 Thymeleaf 为 Web 视图,用 JPA 来实现数据持久化,因此在构建文件里还需要 Thymeleaf 和 Spring Data JPA 的起步依赖。

为了能进行测试,我们还需要能在 Spring Boot 上下文里运行集成测试的库,因此要添加 Spring Boot 的 test 起步依赖,这是一个测试时依赖。

统统放在一起,就有了这五个依赖,也就是 Initializr 在 Gradle 的构建文件里提供的:

dependencies {
  compile "org.springframework.boot:spring-boot-starter-web"
  compile "org.springframework.boot:spring-boot-starter-thymeleaf"
  compile "org.springframework.boot:spring-boot-starter-data-jpa"
  compile "com.h2database:h2"
  testCompile("org.springframework.boot:spring-boot-starter-test")
}

正如先前所见,添加这些依赖的最简单方法就是在 Initializr 里选中 Web、Thymeleaf 和 JPA 复选框。但如果在初始化项目时没有这么做,当然也可以稍后再编辑生成的 build.gradle 或 pom.xml。

通过传递依赖,添加这四个依赖就等价于加了一大把独立的库。这些传递依赖涵盖了 Spring MVC、Spring Data JPA、Thymeleaf 等内容,它们声明的依赖也会被传递依赖进来。

最值得注意的是,这四个起步依赖的具体程度恰到好处。我们并没有说想要 Spring MVC,只是说想要构建一个 Web 应用程序。我们并没有指定 JUnit 或其他测试工具,只是说我们想要测试自己的代码。Thymeleaf 和 Spring Data JPA 的起步依赖稍微具体一点,但这也只是由于没有更模糊的方法声明这种需要。

这四个起步依赖只是 Spring Boot 众多起步依赖中的沧海一粟。附录 B 罗列出了全部起步依赖,并简要描述了一下它们向项目构建引入了什么。

我们并不需要指定版本号,起步依赖本身的版本是由正在使用的 Spring Boot 的版本来决定的,而起步依赖则会决定它们引入的传递依赖的版本。

不知道自己所用依赖的版本,你多少会有些不安。你要有信心,相信 Spring Boot 经过了足够的测试,确保引入的全部依赖都能相互兼容。这是一种解脱,只需指定起步依赖,不用担心自己需要维护哪些库,也不必担心它们的版本。

但如果你真想知道自己在用什么,在构建工具里总能找到你要的答案。在 Gradle 里, dependencies 任务会显示一个依赖树,其中包含了项目所用的每一个库以及它们的版本:

$ gradle dependencies

在 Maven 里使用 dependency 插件的 tree 目标也能获得相似的依赖树。

$ mvn dependency:tree

大部分情况下,你都无需关心每个 Spring Boot 起步依赖分别声明了些什么东西。Web 起步依赖能让你构建 Web 应用程序,Thymeleaf 起步依赖能让你用 Thymeleaf 模板,Spring Data JPA 起步依赖能让你用 Spring Data JPA 将数据持久化到数据库里,通常只要知道这些就足够了。

但是,即使经过了 Spring Boot 团队的测试,起步依赖里所选的库仍有问题该怎么办?如何覆盖起步依赖呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。