首先打開壹個基本的springboot項目,點進去@SpringBootApplication註解。
可以根據名字知道實現自動裝配應該是上面的@EnableAutoConfiguration註解,繼續點進去
這時候對spring註解比較了解的同學應該能感覺到實現原理就在@Import(AutoConfigurationImportSelector.class)這個註解中,@Import註解的參數可以是靜態類(用作直接導入)也可以是實現了ImportSelector接口的類,當是實現了ImportSelector會根據實現的selectImports方法來對類進行導入。讓我們看看AutoConfigurationImportSelector的實現
圖中loadmetadata的方法是加載項目的基本配置數據信息,而getAutoConfigurationEntry方法則是自動裝配的邏輯,繼續點進去
還是在加載配置,繼續點進去
其實到這壹步基本清楚了,做的這些事情都是在加載類,那麽自動裝配到底加載的是什麽類呢,這裏從外部傳入的factoryname是Enableautoconfiguration.class
點進去加載邏輯可以看到是在加載FACTORIES_RESOURCE_LOCATION路徑下的類。
會自動掃描所有項目下FACTORIES_RESOURCE_LOCATION這個路徑下的類,那麽這個路徑是啥?
總結:到這裏基本清楚了,springboot的自動裝配就是通過自定義實現ImportSelector接口,從而導致項目啟動時會自動將所有項目META-INF/spring.factories路徑下的配置類註入到spring容器中,從而實現了自動裝配。
相關的starter和自定義starter都是根據這個實現的。後續有空的話還會寫壹下如何實現自定義starter的隨筆。
以上就是springboot 自動裝配的原理,還有不懂的地方歡迎關註私聊我,很高興為妳解答