4
起步依赖 Starters:版本仲裁的魔法
Starters & Dependency Management
以前用 Spring,你得自己查:Spring 5.3 配哪个版本的 Hibernate?Jackson 哪个版本兼容?现在不用了——Starter 是一组"经过验证的依赖清单",你只引一个 starter,里面所有传递依赖的版本都由 spring-boot-dependencies 统一仲裁,不会出现版本冲突。
| Starter | 干什么用 |
|---|---|
spring-boot-starter-web | Spring MVC + 内嵌 Tomcat + Jackson,做 REST API。 |
spring-boot-starter-data-jpa | Spring Data JPA + Hibernate + HikariCP,操作数据库。 |
spring-boot-starter-data-redis | Redis 客户端 Lettuce + Spring Data Redis。 |
spring-boot-starter-security | Spring Security,认证授权。 |
spring-boot-starter-validation | Bean Validation(Hibernate Validator),参数校验。 |
spring-boot-starter-test | JUnit 5 + Mockito + AssertJ + MockMvc,测试全家桶。 |
spring-boot-starter-actuator | 监控端点,健康检查、指标。 |
spring-boot-starter-aop | AOP + AspectJ。 |
本章面试题 · 第 4 章(Starters)
1.(概念题)starter 到底是什么?为什么一个 starter 就能把一堆依赖拉进来?
查看答案
答案:starter 本质就是一个"依赖清单"——它自己不写代码,只是在 pom 里把某类功能需要的所有依赖(及其兼容版本)列出来。引入 starter = 一次性引入一整套经过版本仲裁的依赖。解析:版本仲裁靠 spring-boot-dependencies 的 BOM,所有版本都在那里统一管理,你不用写版本号。
2.(排错题)为什么我在 starter 里指定了 MySQL 驱动版本,最终生效的却是另一个版本?
查看答案
答案:因为 spring-boot-dependencies 的 BOM 仲裁优先级最高,你自己写的版本会被它覆盖(除非你在 dependencyManagement 里显式指定)。解析:想改版本,要么改 BOM 版本,要么在自己 pom 的 dependencyManagement 里强制指定。