主要是在 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 在啟動時幫我們...