Spring Boot 自動裝配原理

2021-10-22 12:35:50 字數 1846 閱讀 2052

主要是在 configurationclasspostprocessor 類中對其進行的處理,具體的解析邏輯參考07-spring configurationclasspostprocessor,這裡只說一下在 spring boot 中的處理。

通過類圖可以看到 autoconfigurationimportselector 實現了 deferredimportselector 介面,所以在 processimports 中處理的時候,會使用 deferredimportselectorhandler#handle 進行處理,將其新增到 deferredimportselectors 列表中,

解析完成之後,在 configurationclassparser#parse 方法中 this.deferredimportselectorhandler.process() 進行處理匯入的 autoconfigurationimportselector類。使用 deferredimportselectorgroupinghandler#processgroupimports() 進行下一步的處理。

grouping.getimports() -> getimports() -> process()。

在 process 方法中會獲取所有自動裝配的 class 物件,呼叫的是 autoconfigurationimportselector#getautoconfigurationentry 的方法,通過getcandidateconfigurations(annotationmetadata, attributes) 獲取所有的候選配置類,在其中呼叫 springfactoriesloader#loadfactorynames 方法獲取。

autoconfigurationentry autoconfigurationentry = ((autoconfigurationimportselector)deferredimportselector).getautoconfigurationentry(annotationmetadata);
protected listgetcandidateconfigurations(annotationmetadata metadata, annotationattributes attributes)
public static listloadfactorynames(class> factorytype, @nullable classloader classloader) 

string factorytypename = factorytype.getname();

return loadspringfactories(classloadertouse).getordefault(factorytypename, collections.emptylist());

}

/** 返回springfactoriesloader用來載入候選配置的類 */

protected class> getspringfactoriesloade***ctoryclass()

最終通過 loadspringfactories 獲取在 meta-inf/spring.factories 中所有的配置。

在 configurations = getconfigurationclassfilter().filter(configurations); 中將不符合條件的類過濾掉。

《springboot原始碼系列》 自動裝配原理

輔助判斷 初始化第三方jar擴充套件點 這個方法點進去,最終是執行了 springfactoriesloader.loadfactorynames type,classloader 可以看到這裡印證了我們上面說的掃瞄所有依賴jar 的 meta inf spring.factories 所有的配置類...

Springboot自動裝配

而下面那個 import 這個類點進去主要就是為了載入springboot的各種配置檔案。在這個類中你可以找到如下這個方法,去載入配置路徑為meta inf spring autoconfigure metadata.properties檔案。還有乙個方法則會去載入目錄下meta inf sprin...

spring boot 之自動裝配

在之前用spring框架進行開發的時候,我們要寫巨多的配置檔案,並且隨著功能的完善,還需要不停的修改這些檔案,非常痛苦,但是在使用spring boot 之後就沒有這些煩惱啦 雖然還是要寫一點點,但是對比以前,忽略不計 是真的不需要寫這些檔案了嗎?其實這些檔案時spring boot 在啟動時幫我們...