自定义 Spring Boot Starter 的本质是将可复用的配置、Bean 和外部化属性封装为遵循约定的独立模块,通过 autoconfigure 模块实现自动装配,starter 模块仅作依赖门面;Spring Boot 3.x 使用 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 注册配置类,并需配合条件注解、属性绑定与集成测试验证。

自定义 Spring Boot Starter 的本质,是把一套可复用的配置、Bean 和外部化属性打包成独立模块,让其他项目只需引入依赖就能自动装配。它不是写个工具类加个注解就完事,而是一套有结构、有约定、有加载机制的组件封装方式。
明确 Starter 的标准结构
Spring Boot 3.x 起已弃用 spring.factories,改用 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件注册自动配置类。一个规范的 Starter 通常拆为两个模块:
-
xxx-spring-boot-starter-autoconfigure:核心模块,含自动配置类、配置属性类(
@ConfigurationProperties)、条件注解逻辑、默认 Bean 实现 - xxx-spring-boot-starter:门面模块,仅声明对 autoconfigure 模块的依赖,不写任何 Java 代码,方便用户只引这一个 starter 依赖
编写自动配置类与属性绑定
自动配置类必须带 @Configuration,并配合条件注解控制生效时机。常见组合如下:
-
@ConditionalOnClass(YourService.class):确保类路径存在目标类才加载配置 -
@ConditionalOnMissingBean:避免与用户手动定义的 Bean 冲突 -
@EnableConfigurationProperties(YourProperties.class):启用配置属性绑定 -
@ConditionalOnProperty(prefix = "your", name = "enabled", havingValue = "true", matchIfMissing = true):按配置开关控制是否启用
对应属性类用 @ConfigurationProperties(prefix = "your") 标注,并提供合理默认值,例如:
your:
name: demo
timeout: 5000
注册自动配置并验证加载
在 autoconfigure 模块的 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中,每行写一个自动配置类的全限定名,例如:
注意:该文件不能有空行、注释或多余字符;Spring Boot 启动时会扫描此文件并按顺序加载其中类。
验证是否生效,可在启动日志中搜索 AutoConfigurationImportSelector 或启用调试参数:--debug,查看条件评估报告(Condition Evaluation Report)。
测试与发布建议
Starter 必须通过真实集成测试验证,推荐做法:
- 新建一个 Spring Boot 测试项目,仅引入你的 starter 依赖
- 添加 minimal 配置(如
your.enabled=true),启动应用 - 检查目标 Bean 是否注入成功(
@Autowired YourService不报错) - 确认配置属性能被正确读取和使用
发布时使用语义化版本号(如 1.2.0),并确保 starter 模块的 pom 中 packaging 为 jar,且不包含重复依赖。











