5月29日 01:37

Spring Boot Starter 的作用和原理是什么?

Starter 是 Spring Boot 提供的依赖聚合与自动配置的组合机制。它将某项功能所需的所有依赖打包成一个 POM 依赖描述符,同时通过 @EnableAutoConfiguration 扫描 META-INF/spring.factories(或 2.7+ 的 AutoConfiguration.imports)中注册的自动配置类,配合 @ConditionalOnClass@ConditionalOnMissingBean 等条件注解,实现按需装配 Bean。因此引入一个 starter 即可获得完整的依赖集合和零配置的功能启用。

追问

  • @ConditionalOnClass 和 @ConditionalOnMissingBean 分别解决什么问题? 前者在 classpath 存在指定类时才装配,避免缺少依赖导致启动失败;后者在容器中无同名 Bean 时才创建,允许用户覆盖默认配置。
  • 官方 starter 和第三方 starter 的命名规范有何不同? 官方为 spring-boot-starter-*,第三方为 *-spring-boot-starter,反过来便于区分来源。
  • Spring Boot 2.7 后为什么用 AutoConfiguration.imports 替代 spring.factories? spring.factories 职责过重,AutoConfiguration.imports 专用于自动配置注册,加载更高效且语义更清晰。
  • 自定义 starter 时 @ConfigurationProperties 有什么作用?application.yml 中以指定前缀开头的属性映射到 Java 对象,实现外部化配置的类型安全绑定。
  • Starter 依赖传递和 BOM 版本管理是什么关系? Starter 聚合依赖但不管理版本,版本由 spring-boot-dependencies BOM 统一控制,确保兼容性。

写段代码

java
@Configuration @ConditionalOnClass(DataSource.class) @EnableConfigurationProperties(MyProps.class) public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean public MyService myService(MyProps p) { return new MyService(p.getHost(), p.getPort()); } }
标签:Spring Boot