spring boot 自定义 starter 的核心是自动配置+条件装配+配置属性绑定,需通过 autoconfiguration.imports 声明配置类,用 @conditionalonclass/@conditionalonmissingbean 控制加载,并以 @configurationproperties 绑定 aliyun.sms. 前缀配置实现开箱即用。

Spring Boot 自定义 Starter 的核心是“自动配置 + 条件装配 + 配置属性绑定”,不是写个 jar 就叫 Starter,关键在于让使用者 零配置就能开箱即用,同时支持按需定制。
1. 明确 Starter 的职责边界
一个规范的 Starter 应只做一件事:封装某类功能(如 Redis 客户端、短信发送、Excel 导出),并隐藏底层复杂性。它不包含业务逻辑,也不依赖具体项目结构。
- 命名建议:以
xxx-spring-boot-starter结尾(如aliyun-sms-spring-boot-starter) - 不要在 Starter 中直接读取
application.yml全局配置,而是通过@ConfigurationProperties绑定专属前缀(如aliyun.sms.) - 避免引入非必要依赖——Starter 的
pom.xml中,非核心依赖应设为optional = true
2. 搭建 Starter 工程结构
新建 Maven 模块(非 Spring Boot Web 项目),目录结构精简:
-
src/main/java/com.example.starter:放自动配置类、属性类、工具类 -
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 2.7+ 推荐方式,替代旧版spring.factories) - 无需
application.properties,不启动任何服务
在 AutoConfiguration.imports 文件中,逐行写入自动配置类的全限定名,例如:
3. 编写自动配置类(核心)
这是一个普通 @Configuration 类,但需配合条件注解控制加载时机:
- 用
@ConditionalOnClass确保类路径存在关键依赖(如com.aliyuncs.CommonRequest) - 用
@ConditionalOnMissingBean避免与用户自定义 Bean 冲突 - 用
@EnableConfigurationProperties绑定配置属性 - 方法上加
@Bean声明要注入的组件(如SmsService)
示例片段:
@Configuration@ConditionalOnClass(CommonRequest.class)
@EnableConfigurationProperties(AliyunSmsProperties.class)
public class AliyunSmsAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public SmsService smsService(AliyunSmsProperties props) {
return new DefaultSmsService(props);
}
}
4. 提供可配置属性和默认行为
定义属性类时继承 @ConfigurationProperties,并指定前缀:
public class AliyunSmsProperties {
private String accessKeyId;
private String accessKeySecret;
private String regionId = "cn-hangzhou";
// getter/setter...
}
使用者只需在 application.yml 中写:
sms:
access-key-id: xxx
access-key-secret: xxx
Starter 就会自动创建并注入 SmsService,业务代码直接 @Autowired 即可使用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











