Skip to content

SpringBoot Starter 机制

TIP

Starter 是 SpringBoot 的依赖聚合机制,将相关依赖和自动配置打包在一起,实现开箱即用。

命名规范

官方 Starter:spring-boot-starter-{模块}
  示例:spring-boot-starter-web
        spring-boot-starter-data-redis

第三方 Starter:{模块}-spring-boot-starter
  示例:mybatis-spring-boot-starter
        redisson-spring-boot-starter

Starter 原理

每个 Starter 包含:

  1. 依赖的 JAR 包
  2. 自动配置类(AutoConfiguration)
  3. spring.factories 配置
my-starter
├── pom.xml
└── src/main
    └── resources
        └── META-INF
            └── spring.factories

自定义 Starter

java
// 1. 自动配置类
@Configuration
@ConditionalOnClass(MailService.class)
@EnableConfigurationProperties(MailProperties.class)
public class MailAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MailService mailService(MailProperties properties) {
        return new MailServiceImpl(properties);
    }
}

// 2. 配置属性类
@ConfigurationProperties(prefix = "mail")
public class MailProperties {
    private String host = "smtp.example.com";
    private int port = 25;
    private String username;
    private String password;
    // getter / setter
}

// 3. spring.factories
// org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
// com.example.mail.MailAutoConfiguration

使用自定义 Starter

yaml
# 引入依赖后只需配置:
mail:
  host: smtp.qq.com
  port: 587
  username: user@qq.com
  password: xxx

控制 Starter 加载顺序

java
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@AutoConfigureAfter(JdbcTemplateAutoConfiguration.class)
public class MyAutoConfiguration { }

TIP

Starter 机制实现了关注点分离,每个 Starter 只负责一个领域功能,使用者按需引入即可。