springboot 1:自動配置原理 出發: @SpringBootApplication註解:是springboot的核心註解 進入可以得到 可以看到:其具有以下兩個註解 @SpringBootConfiguration //表示這是springboot的一個參數 @EnableAutoConf ...
springboot
1:自動配置原理
出發:
@SpringBootApplication註解:是springboot的核心註解
進入可以得到
可以看到:其具有以下兩個註解
-
@SpringBootConfiguration //表示這是springboot的一個參數 @EnableAutoConfiguration //開啟自動配置功能
對於@SpringBootConfiguration註解,展開來看:
其中要關註以下兩點:
@Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage //翻譯為自動配置包
@Import(AutoConfigurationImportSelector.class):其進行了一個導入,導入的功能就起著關鍵的作用,可以看到,它實際上導入了一個類——自動配置導入選擇器,那麼我們可以接著去看這個選擇器究竟是個啥,起了啥作用。
可以看到,在這個類中具有這樣一個方法,選擇導入(哪些配置文件),顧名思義,這個方法可以獲得我們的項目需要哪些配置文件,可以看到其又調用了一個稱為自動獲取所需要的配置文件(getAutoConfigurationEntry())方法
顧名思義,通過這個函數就可以取出當前我們的項目所需要調用到哪些具體配置,通過debug可以看到,我的這個項目當前需要調用到以下的配置文件
那麼,我們便會去想,這個方法是如何去獲取這些配置文件的呢,從圖中可以看到,在getCandidateConfigurations()這個方法執行後,我們所需要得到的配置文件列表大致就獲得了,進入這個獲取候選配置的方法,再進入loadFactoryNames方法
可以看到其中有一個稱為載入spring 工廠的方法,可以見名知意,說明通過這個方法我們可以獲得配置名稱,進入這個方法
可以看到,其實際工作的原理就類似於迭代器的遍歷方法,我們要關註的是,其是從哪裡取的數據urls來用於比對的
點開,發現是
這下就全部明瞭了,總的來說就是從這裡取出配置文件的所有數據,來與我們傳入的所需配置文件進行對比,進而來判斷哪些配置是我們需要的。
選擇回到之前,我們還差一個@AutoConfigurationPackage沒有提到,這個註解實際上就說明瞭我們的spring會自動將獲取包的路徑,進入這個註解:
可以看到其主要功能是基於導入的這個類實現的,再進入這個Registrar類
其具有兩個方法,我們需要關註的是一個方法,這是一個自動註冊配置包的方法,我們需要關註第二個參數,也就是如何獲取我們所需要註冊的包名。
可以看到,通過這個方法可以獲取當前main方法所在的包的目錄