SpringBoot的自動(dòng)配置原理解析
SpringBoot的自動(dòng)配置
SpringBoot的自動(dòng)配置要從它的啟動(dòng)類 @SpringBootApplication 說(shuō)起,點(diǎn)進(jìn)注解。
元注解
可以看到,它是復(fù)合注解組成,前面四個(gè)注解是注解的元注解,用來(lái)定義注解的行為。
- @Target設(shè)置當(dāng)前注解可以標(biāo)記在哪。(ElementType.type)表示標(biāo)注在類上面。
- @Retion(RetentionPolicy.RUNTIME)當(dāng)注解標(biāo)注的類編譯后,以什么方式保留
- { SOURCE:編譯后保留源文件,不保留注解。
CLASS:會(huì)保留注解,但是不會(huì)被JVM所編譯到,不會(huì)被反射找到。
RUNTIME: 可以保留在源文件和被JVM加載 }
- { SOURCE:編譯后保留源文件,不保留注解。
- @Documented 當(dāng)我們生成java doc(文檔)的時(shí)候,會(huì)生成注解信息
- @Inherited是否會(huì)被集成
@SpringBootConfiguration
@SpringBootConfiguration 是springboot的配置類。
它的注解也是復(fù)合注解
@Configuration 就是把當(dāng)前的類標(biāo)記位配置類。
所以 @SpringBootConfiguration 標(biāo)注在某個(gè)類上,表示它是Spring Boot的配置類。
@ComponentScan
@ComponentScan 掃描包,相當(dāng)于在spring.xml配置中 <context:comonent-scan> ,但是并沒(méi)有指定basePackage,如果沒(méi)有指定掃描包,spring底層會(huì)自動(dòng)掃描當(dāng)前配置類所在的包。
其中 excludeFilters屬性 會(huì)排除掉那些不需要的bean,按照自定義的方式來(lái)排除,需要指定一個(gè)類(實(shí)現(xiàn) TypeFilter接口 )。
然后根據(jù) match() 來(lái)篩選不需要的bean
AutoConfigurationExcludeFilter 這個(gè)類時(shí)是專門來(lái)排除配置類,并且是自動(dòng)配置類中里面的其中一個(gè)。
*@EnableAutoConfiguration
@EnableAutoConfiguration 是啟動(dòng)自動(dòng)配置。只要加了它,就會(huì)加載所有的自動(dòng)配置類。開(kāi)啟自動(dòng)配置功能。 以前我們需要配置的東西,spring boot會(huì)自動(dòng)幫我們配。
@AutoConfigurationPackage 將當(dāng)前配置類所在的包保存在一個(gè)BasePackages的Bean中。供Spring內(nèi)部使用。
@Import 給我們導(dǎo)入了一個(gè) AutoConfigurationImportSelector 類
DeferredImportSelector工作原理
spring的底層會(huì)看你有沒(méi)有實(shí)現(xiàn) getImportGroup() 方法。
- 沒(méi)有實(shí)現(xiàn)會(huì)返回一個(gè)數(shù)組,將數(shù)組中的完整類名注冊(cè)為Bean實(shí)現(xiàn)了就需要返回一個(gè)自定義實(shí)現(xiàn)了 DeferredImportSelector.Group 的類,實(shí)現(xiàn)了了 Group接口的slelctImport() 和 process() 。
- process()調(diào)用了 getAutoConfigurationEntry() ,依次調(diào)用 getCandidateConfigurations() 獲取所有的自動(dòng)配置類。
到此這篇關(guān)于SpringBoot的自動(dòng)配置原理解析的文章就介紹到這了,更多相關(guān)SpringBoot自動(dòng)配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot?實(shí)現(xiàn)CAS?Server統(tǒng)一登錄認(rèn)證的詳細(xì)步驟
??CAS(Central?Authentication?Service)中心授權(quán)服務(wù),是一個(gè)開(kāi)源項(xiàng)目,目的在于為Web應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄,這篇文章主要介紹了SpringBoot?實(shí)現(xiàn)CAS?Server統(tǒng)一登錄認(rèn)證,需要的朋友可以參考下2024-02-02在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說(shuō)明
這篇文章主要介紹了在MyBatis中使用 # 和 $ 書寫占位符的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10IDEA 2020.2 部署JSF項(xiàng)目的詳細(xì)過(guò)程
本文通過(guò)圖文并茂的形式教大家如何在IDEA中創(chuàng)建一個(gè)JSF項(xiàng)目及遇到問(wèn)題的解決方法,感興趣的朋友跟隨小編一起看看吧2021-09-09java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11詳解Java中字典樹(shù)(Trie樹(shù))的圖解與實(shí)現(xiàn)
Trie又稱為前綴樹(shù)或字典樹(shù),是一種有序樹(shù),它是一種專門用來(lái)處理串匹配的數(shù)據(jù)結(jié)構(gòu)。本文將利用圖解詳細(xì)講解Trie樹(shù)的實(shí)現(xiàn),需要的可以參考一下2022-05-05Java之System.getProperty()的作用及使用說(shuō)明
這篇文章主要介紹了Java之System.getProperty()的作用及使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04