淺談spring.factories文件的作用
對于在maven中引用的其他外部包加入容器的過程,需要用到spring.factories。
spring.factories文件是Spring Boot自動配置的核心文件之一,它的作用是將各種自動配置類與對應(yīng)的配置類集中在一起,方便Spring Boot自動裝配。在Spring Boot啟動時,它會掃描classpath下所有的spring.factories文件,加載其中的自動配置類,并將它們注入到Spring ApplicationContext中,使得項目能夠自動運行。該文件的格式為鍵值對,鍵是自動配置類的全限定名,值是該自動配置類所對應(yīng)的配置類的全限定名。
首先@SpringApplication注解標(biāo)識在啟動類上, 它是一個組合注解點進(jìn)去可以看到

其中@EnableAutoConfiguration也就是開啟自動裝配, 繼續(xù)跟蹤@EnableAutoConfiguration注解, 它使用一個@Import 注解, 將一個類名為AutoConfigurationImportSelector注入到IOC容器中.

這個AutoConfigurationImportSelector類很重要, 因為springboot項目啟動時, 會調(diào)用它里面一個方法loadFactoryNames, 這個方法會掃描pom文件中引入的其他starter中的spring.factories文件, 具體的調(diào)用路徑為:
1、調(diào)用selectImports()方法

2、調(diào)用getAutoConfigurationEntry( )

3、–>調(diào)用getCandidateConfigurations( )–>

可以看到最后調(diào)用loadFactoryNames( )方法,這個方法的邏輯就是掃描pom文件中引入的其他starter中的spring.factories文件。
spring.factories文件內(nèi)容示例如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\ com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
spring.factories用鍵值對的方式記錄了所有需要加入容器的類,EnableAutoConfigurationImportSelector的selectImports方法返回的類名,來自spring.factories文件內(nèi)的配置信息,這些配置信息的key等于EnableAutoConfiguration,因為spring boot應(yīng)用啟動時使用了EnableAutoConfiguration注解,所以EnableAutoConfiguration注解通過import注解將EnableAutoConfigurationImportSelector類實例化,并且將其selectImports方法返回的類名實例化后注冊到spring容器。
即spring.factories文件是幫助spring-boot項目包以外的bean(即在pom文件中添加依賴中的bean)注冊到spring-boot項目的spring容器中。由于@ComponentScan注解只能掃描spring-boot項目包內(nèi)的bean并注冊到spring容器中,因此需要@EnableAutoConfiguration注解來注冊項目包外的bean。而spring.factories文件,則是用來記錄項目包外需要注冊的bean類名。
到此這篇關(guān)于淺談spring.factories文件的作用的文章就介紹到這了,更多相關(guān)spring.factories作用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatisPlus條件構(gòu)造器常用方法小結(jié)
這篇文章主要介紹了mybatisPlus條件構(gòu)造器常用方法,首先是.select和其他條件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
解決spring-boot-starter-web等報紅問題
這篇文章主要介紹了解決spring-boot-starter-web等報紅問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Spring Cloud Zuul集成Swagger實現(xiàn)過程解析
這篇文章主要介紹了Spring Cloud Zuul集成Swagger實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11

