Spring Boot Starter是在SpringBoot組件中被提出來的一種概念。傳統(tǒng)的 Spring 項目想要運行,需要導入各種依賴和配置,十分繁瑣。而Spring Boot 能簡化配置、開箱即用、快速集成,主要歸功于SpringBoot 的 starter 機制。通過starter,我們能夠快速的引入一個功能組件。本文將對 stater 進行介紹。
1 starter概述
starter會把所有用到的依賴都給包含進來,避免了開發(fā)者自己去引入依賴所帶來的麻煩。
starter中使用ConfigurationProperties來保存配置,這些配置都可以有默認值,幫助用戶減少了無謂的配置操作。同時starter一般會預留自定配置選項,只需要在application.properties中設置相關參數(shù),就可以實現(xiàn)配置的個性話。
這里簡單介紹下starter實現(xiàn)自動化配置的流程。
引入starter依賴后,spring-boot啟動的時候會找到starter jar包中的resources/META-INF/spring.factories文件,根據(jù)spring.factories文件中的配置,找到需要自動配置的類
2 Starter創(chuàng)建和使用步驟
2.1 starter創(chuàng)建
創(chuàng)建一個starter項目
創(chuàng)建一個ConfigurationProperties,用于保存配置信息
創(chuàng)建一個AutoConfiguration(Configuration)
AutoConfiguration中實現(xiàn)所有starter應該完成的操作;
AutoConfiguration 并且把這個類加入spring.factories配置文件中進行聲明配置spring.factories
把AutoConfiguration類加入spring.factories配置文件中進行聲明。通過該配置,才能SpringBoot來自動加載AutoConfiguration類。打包項目
2.2 starter使用
在項目里使用starter非常簡單:
- 引入starter依賴
- 添加配置(如果需要的話)
- 注入需要的service
3 實現(xiàn)一個Spring Boot Starter項目
3.1 創(chuàng)建Starter項目
SpringBoot系列定義jar包的名稱是:
spring-boot-starter-xxx.jar
而自己的項目定義的jar通常是:
xxx-spring-boot-starter.jar
這里我們創(chuàng)建一個husky-spring-boot-starter項目,pom主要如下
<groupId>com.dc.husky</groupId>
<artifactId>husky-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
3.2 創(chuàng)建ConfigurationProperties
ConfigurationProperties用于保存配置信息:
@ConfigurationProperties(prefix = "husky")
@Getter
@Setter
public class HuskyProperties {
private String character;
}
3.3 創(chuàng)建AutoConfiguration
@Configuration
@EnableConfigurationProperties(HuskyProperties.class)
public class HuskyAutoConfiguration {
@Bean
public Husky husky(HuskyProperties properties){
Husky husky = new Husky(properties.getCharacter());
return husky;
}
}
HuskyAutoConfiguration 主要的業(yè)務功能定義Husky如下
public class Husky {
private String character;
private String name = "husky";
public Husky(String character) {
this.character = character;
}
public void tellSecret(){
if ("lovely".equals(character)){
System.out.println("Congratulation! You have a lovely husky.");
} else {
System.out.println("What a pity! You have a naughty husky.");
}
}
}
3.4 配置spring.factories
在resources/META-INF/下創(chuàng)建spring.factories文件,并添加下列配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.dc.husky.starter.HuskyAutoConfiguration
3.4 打包項目,生成jar包

3.5 使用spring-boot-starter
maven引入husky-spring-boot-starter的jar包
<dependency>
<groupId>com.dc.husky</groupId>
<artifactId>husky-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
在 resources/application.properties文件添加自定義的配置
husky.character=lovely
測試輸出
@SpringBootTest
@Slf4j
class ApplicationTests {
@Autowired
private Husky husky;
@Test
void test() {
husky.tellSecret();
}
}
輸出結果如下
2022-10-15 19:21:57.115 INFO 90145 --- [main] c.d.a.s.ApplicationTests : Started ApplicationTests in 4.353 seconds (JVM running for 7.676)
Congratulation! Your have a lovely husky.
4 原理
我們引入starter的依賴,會將自動配置的類的jar引入。主要的邏輯如下:
在SpringBoot的啟動類會加上@SpringBootApplication注解。這個注解默認會引入@EnableAutoConfiguration注解。
@EnableAutoConfiguration注解使用@Import引入了AutoConfigurationImportSelector類。
AutoConfigurationImportSelector的selectImports方法最終會通過SpringFactoriesLoader.loadFactoryNames加載META-INF/spring.factories文件。
spring.factories包含了所有需要裝配的XXXConfiguration類的全限定名。其中就有我們自己定義的HuskyAutoConfiguration。這些configuration類定義的bean根據(jù)配置信息進行初始化,并加入到spring到容器中。