2.2.1 指定基于功能的依赖
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论