SpringBoot是如何實現(xiàn)自動配置的你知道嗎
SpringBoot啟動類:
@SpringBootApplication public class CommunityApplication { public static void main(String[] args) { SpringApplication.run(CommunityApplication.class, args); } }
進(jìn)入@SpringBootApplication源碼中:
AutoConfigurationImportSelector 類的作用就是往 Spring 容器中導(dǎo)入組件,我們再進(jìn)入這個類的源碼,發(fā)現(xiàn)有這幾個方法:
loadmetadata的方法是加載項目的基本配置數(shù)據(jù)信息。
而getAutoConfigurationEntry方法則是實現(xiàn)自動裝配的邏輯,繼續(xù)點進(jìn)去
public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
步驟如下:
1、首先注意到 selectImports 方法,這個方法用于給容器中導(dǎo)入組件,然后跳到 getAutoConfigurationEntry 方法,用于獲取自動配置項。
2、再來進(jìn)入 getCandidateConfigurations 方法就是 獲取一個自動配置 List ,這個 List 就包含了所有的自動配置的類名 。
3、再進(jìn)入 SpringFactoriesLoader 類的 loadFactoryNames 方法,跳轉(zhuǎn)到 loadSpringFactories 方法發(fā)現(xiàn) ClassLoader 類加載器指定了一個 FACTORIES_RESOURCE_LOCATION 常量。
4、然后利用 PropertiesLoaderUtils 把 ClassLoader 掃描到的這些文件的內(nèi)容包裝成 properties 對象,從 properties 中獲取到 EnableAutoConfiguration.class 類(類名)對應(yīng)的值,然后把他們添加在容器中。
打開META-INF/spring.factories文件,EnableAutoConfiguration 有一個 = 號,= 號后面那一串就是這個項目需要用到的自動配置類。
追溯完成!??!
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java反射中java.beans包學(xué)習(xí)總結(jié)
本篇文章通過學(xué)習(xí)Java反射中java.beans包,吧知識點做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對此有需要的朋友可以學(xué)習(xí)參考下。2018-02-02IntelliJ IDEA 安裝及初次使用圖文教程(2020.3.2社區(qū)版)
這篇文章主要介紹了IntelliJ IDEA 安裝及初次使用(2020.3.2社區(qū)版),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Springboot使用Spring Data JPA實現(xiàn)數(shù)據(jù)庫操作
Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 規(guī)范的基礎(chǔ)上開發(fā)的一個框架,使用 Spring Data JPA 可以極大地簡化JPA 的寫法,本章我們將詳細(xì)介紹在Springboot中使用 Spring Data JPA 來實現(xiàn)對數(shù)據(jù)庫的操作2021-06-06maven依賴包沖突SLF4J:?Class?path?contains?multiple?SLF4J?bi
這篇文章主要給大家介紹了關(guān)于maven依賴包沖突SLF4J:?Class?path?contains?multiple?SLF4J?bindings的處理方法,這個問題通常是因為項目中存在多個SLF4J的實現(xiàn)綁定(bindings)導(dǎo)致的沖突,需要的朋友可以參考下2024-02-02mybatis plus實體類中字段映射mysql中的json格式方式
這篇文章主要介紹了mybatis plus實體類中字段映射mysql中的json格式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08