1.前言
自動裝配則是 SpringBoot 的核心,自動裝配是如何實作的呢?為什么我們只要引入一個 starter 組件依賴就能實作自動裝配呢,接下來就讓我們一起來探討下 SpringBoot 的自動裝配機制
2.自動裝配原理
提到自動裝配,那么你首先得知道spring的SPI(serviceproviderinterface)機制,因為自動裝配的完成就是靠SPI機制完成的,
接下來咱就詳細分解下自動裝配的原理程序
2.1@SpringBootApplication注解
spingBootApplication 注解是springBoot的核心,此注解為復合注解,如下圖,其中@EnableAutoConfiguration注解又是實作自動裝配的關鍵,

2.2@EnableAutoConfiguration注解
如圖:此注解也是一個復合注解,其中@Import也是實作自動裝配的關鍵,個人認為這是一個最核心的注解,有時間,我會單獨寫一篇博客來針對此注解進行講解,注意看:此注解中的value為:AutoConfigurationImportSelector.class,其實呢,@Import注解的value為一個class 陣列,這里并未看出,其實可以寫多個

2.3AutoConfigurationImportSelector
org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getAutoConfigurationEntry 是這里的核心,
這里做了兩件事情:
1.加載了各個模塊下的spring.factories檔案
2.將spring.facrotries中加載的全限定類名去重,并將帶有@excule的注解刨除掉,

2.4 如何加載各個模塊下的spring.factories檔案的呢?
我們可以追溯 org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法
在org.springframework.core.io.support.SpringFactoriesLoader#loadSpringFactories中找到了加載spring.factroies的地方 其中FACTORIES_RESOURCE_LOCATION =META-INF/spring.factories 也就是說我們的spring.factories的存放路徑及名稱都需要遵守這個規則

這里加載完成之后是spring.factorties里的所有值,之后會把enableAutoConfiguration的值過濾出來,然后加載到容器中,
下面看下我們加載到了什么:可以看到,這些***AutoConfiguration 類就是各個組件的配置類,這也就是為什么springBoot不需要再撰寫那么的xml的原因,

2.5 拿到spring.factories 關于enableAutoConfiguration的值并過濾后各組件的的配置類是如何加載到spring 容器中的呢?
可以看到 我們的AutoConfigurationImportSelector 實作了DeferredImportSelector介面,而此介面繼承了ImportSelector介面,

ImportSelector介面:定義了selectImports介面方法,此方法回傳了要加載進容器中的類的全限定名,

至此,我們知道了springBoot 是如何一步步找到各組件的spring.facatories,并將autoAutoConfiguration對應的類全限定名取出來,即各組件的配置類,然后加載到容器中的整個程序
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555337.html
標籤:其他
上一篇:[ARM 匯編]進階篇—存盤訪問指令—2.3.2 多資料傳輸指令
下一篇:返回列表
