SpringBoot是如何實(shí)現(xiàn)自動(dòng)配置的你知道嗎
SpringBoot啟動(dòng)類:
@SpringBootApplication
public class CommunityApplication {
public static void main(String[] args) {
SpringApplication.run(CommunityApplication.class, args);
}
}
進(jìn)入@SpringBootApplication源碼中:


AutoConfigurationImportSelector 類的作用就是往 Spring 容器中導(dǎo)入組件,我們?cè)龠M(jìn)入這個(gè)類的源碼,發(fā)現(xiàn)有這幾個(gè)方法:

loadmetadata的方法是加載項(xiàng)目的基本配置數(shù)據(jù)信息。
而getAutoConfigurationEntry方法則是實(shí)現(xiàn)自動(dòng)裝配的邏輯,繼續(xù)點(diǎn)進(jìn)去




public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
步驟如下:
1、首先注意到 selectImports 方法,這個(gè)方法用于給容器中導(dǎo)入組件,然后跳到 getAutoConfigurationEntry 方法,用于獲取自動(dòng)配置項(xiàng)。
2、再來(lái)進(jìn)入 getCandidateConfigurations 方法就是 獲取一個(gè)自動(dòng)配置 List ,這個(gè) List 就包含了所有的自動(dòng)配置的類名 。
3、再進(jìn)入 SpringFactoriesLoader 類的 loadFactoryNames 方法,跳轉(zhuǎn)到 loadSpringFactories 方法發(fā)現(xiàn) ClassLoader 類加載器指定了一個(gè) FACTORIES_RESOURCE_LOCATION 常量。
4、然后利用 PropertiesLoaderUtils 把 ClassLoader 掃描到的這些文件的內(nèi)容包裝成 properties 對(duì)象,從 properties 中獲取到 EnableAutoConfiguration.class 類(類名)對(duì)應(yīng)的值,然后把他們添加在容器中。
打開(kāi)META-INF/spring.factories文件,EnableAutoConfiguration 有一個(gè) = 號(hào),= 號(hào)后面那一串就是這個(gè)項(xiàng)目需要用到的自動(dòng)配置類。

追溯完成?。。?/p>
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
spring?kafka?@KafkaListener詳解與使用過(guò)程
這篇文章主要介紹了spring-kafka?@KafkaListener詳解與使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
Java連接MySQL數(shù)據(jù)庫(kù)命令行程序過(guò)程
SQL編程包括兩種形式,一種是過(guò)程化編程,主要通過(guò)數(shù)據(jù)庫(kù)交互式工具,通過(guò)存儲(chǔ)過(guò)程、觸發(fā)器、函數(shù)等形式的編程;另一種是嵌入式SQL編程,將SQL語(yǔ)句嵌入到高級(jí)開(kāi)發(fā)語(yǔ)言,完成數(shù)據(jù)的各種操作2021-10-10
深入了解Spring中最常用的11個(gè)擴(kuò)展點(diǎn)
我們一說(shuō)到spring,可能第一個(gè)想到的是?IOC(控制反轉(zhuǎn))?和?AOP(面向切面編程)。除此之外,我們?cè)谑褂胹pring的過(guò)程中,有沒(méi)有發(fā)現(xiàn)它的擴(kuò)展能力非常強(qiáng)。今天就來(lái)跟大家一起聊聊,在Spring中最常用的11個(gè)擴(kuò)展點(diǎn)2022-09-09
SpringBoot項(xiàng)目中application.yml和bootstrap.yml文件的區(qū)別及說(shuō)明
`application.yml`和`bootstrap.yml`都是Spring Boot項(xiàng)目中的配置文件,但它們?cè)诩虞d時(shí)機(jī)、用途、優(yōu)先級(jí)、配置來(lái)源、適用場(chǎng)景和是否必須存在等方面存在區(qū)別2025-03-03
ArrayList?foreach循環(huán)增添刪除導(dǎo)致ConcurrentModificationException解決分
這篇文章主要為大家介紹了ArrayList?foreach循環(huán)增添刪除導(dǎo)致ConcurrentModificationException解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-12-12
springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開(kāi)瀏覽器訪問(wèn)項(xiàng)目方式
這篇文章主要介紹了springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開(kāi)瀏覽器訪問(wèn)項(xiàng)目方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
MybatisPlus為何可以不用@MapperScan詳解
這篇文章主要給大家介紹了關(guān)于MybatisPlus為何可以不用@MapperScan的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MybatisPlus具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-04-04

