springboot starter的原理


參考原文:https://blog.csdn.net/weixin_38538285/article/details/119979419

一原理:

springboot可以幫助我們快速的開發一個后端應用,我們只需引入依賴,添加簡單的配置就能實現對其他框架的整合。他的奧妙就在於它各種各樣的starter。

springboot是如何實現引入一些jar包的依賴就將這些jar包中定義的spring的bean加載到spring容器中的呢?答案就是spring的SPI機制。

SPI(Service Provider Interface)服務提供接口,是實現服務解耦,插件自由插拔的一種機制。通過一些類加載器,去加載classpath下指定目錄文件,文件中定義的有需要加載的類的全權限定名,然后這些類會被識別並加載。

Spring的SPI使用由SpringFactoriesLoader.loadFactoryNames方法實現。

加載所有依賴的jar包下classPath下META-INF/spring.factories文件,然后將解析properties文件,找到指定名稱的配置后返回。

小知識:

(@Import(Abc.class),如果Abc類實現了ImportSelector接口,spring容器就會實例化Abc類,並且調用其selectImports方法;)

(@Import(Abc.class),如果Abc類實現了ImportBeanDefinitionRegistrar接口,spring容器就會實例化Abc類,並且調用其registerBeanDefinitions方法;)

調用鏈路:@SpringBootApplication ->@EnableAutoConfiguration ->@Import({AutoConfigurationImportSelector.class})

->selectImports ->getAutoConfigurationEntry
->getCandidateConfigurations ->SpringFactoriesLoader.loadFactoryNames ->loadSpringFactories

->classLoader.getResources("META-INF/spring.factories")
 
        

 





免責聲明!

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



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