重頭學(xué) || SpringBoot 2.7 自定義 Starter 方法又變了

springboot 2.7 已經(jīng)標(biāo)記 spring.factories 加載自動(dòng)化配置方式為過期,springboot 3 中將完全移除原有方式,這也就意味著現(xiàn)有市面所有 spring-boot-starter 將無法適配 spring boot 3
一、 spring.factories 是啥
在 Spring 中也有一種類似 Java SPI 的加載機(jī)制。它在 META-INF/spring.factories 文件中配置接口的實(shí)現(xiàn)類名稱,然后在程序中讀取這些配置文件并實(shí)例化。
這種自定義的 SPI 機(jī)制是 Spring Boot Starter 實(shí)現(xiàn)的基礎(chǔ)。即當(dāng)你依賴了某個(gè) Starter,那么該 Starter 就提供相關(guān)的類供加載,這些配置類負(fù)責(zé)特定的功能。如果你沒有依賴某個(gè) Starter,就不會(huì)加載相關(guān)的類。

二、新特性支持自動(dòng)配置分片
2.1 為什么要支持配置分片
我們以 mybatis-plus-boot-starter 為例,如下圖 spring.factories 配置很多幾乎所有的 spring config bean 都可以往這里放,對(duì)于開發(fā)者維護(hù)造成困難。
② 環(huán)境配置處理器 ③ 自動(dòng)化配置類

2.2 如何使用自動(dòng)配置分片功能
創(chuàng)建 org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件
├──?src
│???└──?main
│???????└──?resources
│???????????├──?META-INF
│???????????│???└──?spring
│???????????│???????└──?org.springframework.boot.autoconfigure.AutoConfiguration.imports

2.3 配置分片的源碼分析

① 兼容原來的 spring.factories 配置加載方式
② 讀取分片配置 加載相關(guān)的類

三、擴(kuò)展屬于自己的 Import SPI
pig[1] 定義 org.springframework.cloud.openfeign.FeignClient.imports用于定義 feignclient (通過 SPI 機(jī)制注入 feignclient ,避免包規(guī)則不規(guī)范導(dǎo)致 feignclient 無法加載的問題)

使用 ImportCandidates.load()

四、更優(yōu)雅的處理配置分片 mica-auto
如果你不喜歡配置這種繁瑣的 SPI 文件,可以來試驗(yàn)一下 mica-auto[2]
最新版本可以基于 @AutoConfiguration 注解自動(dòng)生成并配置對(duì)應(yīng)的
imports 文件

參考資料
pig: https://github.com/pig-mesh/pig
[2]mica-auto: https://github.com/lets-mica/mica-auto
??????????????????????????????????????????????????
