springboot自動裝配原理


最近開始學習spring源碼,看各種文章的時候看到了springboot自動裝配實現原理。用自己的話簡單概括下。

首先打開一個基本的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的隨筆。
系統默認的META-INF/spring.factories路徑下配置為

筆者用的springboot版本為2.2.1,參考文章
https://mp.weixin.qq.com/s?__biz=MzU5MDgzOTYzMw==&mid=2247484694&idx=1&sn=e8d18bf3f2ee144ecb63f1b3d3190033&scene=21#wechat_redirect


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM