一看就會(huì),編寫自己的SpringBoot-Starter
開發(fā)自己的starter
starter的好處是,集成眾多依賴,提供一個(gè)一站式的依賴項(xiàng)。 Starter相當(dāng)于模塊,它能將模塊所需的依賴整合起來并對模塊內(nèi)的Bean根據(jù)環(huán)境( 條件)進(jìn)行自動(dòng)配置。 使用者只需要依賴相應(yīng)功能的Starter,無需做過多的配置和依賴, Spring Boot就能自動(dòng)掃描并加載相應(yīng)的模塊。
命名
spring官方的starter命令為spring-boot-starter-xxx,所以我們開發(fā)的項(xiàng)目不要以spring-boot開頭。 建議寫成:xxx公司組織-spring-boot-starter-yyy模塊
開發(fā)步驟
1.新建Maven項(xiàng)目,在項(xiàng)目的POM文件中定義使用的依賴;
2.新建配置類,寫好配置項(xiàng)和默認(rèn)的配置值,指明配置項(xiàng)前綴;
3.新建自動(dòng)裝配類,使用@Configuration和@Bean來進(jìn)行自動(dòng)裝配;
4.新建spring.factories文件,指定Starter的自動(dòng)裝配類;
具體代碼
1,新建一個(gè)springboot項(xiàng)目,在pom文件中增加以下依賴:
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-configuration-processor</artifactId>
- <optional>true</optional>
- </dependency>
主要的作用是在編譯時(shí)在META-INF下生成spring-configuration-metadata.json 文件,該文件主要為IDE使用。 即可以通過在application.properties文件中通過ctrl + 點(diǎn)擊進(jìn)入配置屬性所在的類中
2,配置類

關(guān)鍵是要指定配置項(xiàng)的前綴。這些配置項(xiàng),也可以設(shè)置默認(rèn)值。
3,自動(dòng)裝配類
自動(dòng)裝配類是整個(gè)starter的邏輯核心。根據(jù)配置項(xiàng)的值,自動(dòng)注入合適的bean。
在這個(gè)項(xiàng)目中,有一個(gè)抽象的AbstractMyService,代表客戶端會(huì)使用的服務(wù)bean。
MyStarterServiceV1和MyStarterServiceV2是根據(jù)條件注入的具體實(shí)現(xiàn)類。
也就是客戶端在配置spring101.version=v1會(huì)使用MyStarterServiceV1,
配置spring101.version=v2會(huì)使用MyStarterServiceV2

4,新建spring.factories文件,指定Starter的自動(dòng)裝配類。
在resources下新建META-INF文件夾,新建spring.factories文件。內(nèi)容為:
- #指定autoconfigure加載的自動(dòng)裝配類是哪個(gè)
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.uncley.MyAutoConfiguration
5,打包測試
maven clean install
先install到本地倉庫測試
新創(chuàng)建一個(gè)普通的springboot工程:mystarter-use 依賴 在application.properties增加配置
- spring101.age=22
- spring101.name=uncleY
- spring101.version=v2
寫一個(gè)測試類
- @Component
- @Slf4j
- public class MyStarterUseTest implements CommandLineRunner {
- @Autowired
- private AbstractMyService myService;
- @Override
- public void run(String... args) throws Exception {
- log.info(myService.hello());
- }
- }
通過修改spring101.version的值可以觀察到,實(shí)例化了不同的service