學AI,好工作 就找北大青鳥
關注小青 聽課做題,輕松學習
周一至周日
4000-9696-28

你知道什么是 ”約定優(yōu)于配置” 嗎?

來源:北大青鳥總部 2023年01月11日 10:40

摘要: 實際上SpringBoot的自動裝配原理,就是在項目啟動時去加載META-INF下的spring.factories文件。在啟動的過程中還會有其他配置項的加載,本文主要介紹自動裝配的加載過程。

目前微服務已是企業(yè)標配,鑒于很多小伙伴還只是停留在知其然,確不知其所以然的情況,這里給大家總結一下SpringBoot的自動裝配原理。

后面有些內容老師就是基于SpringBoot這種源碼的自動裝配原理的來直接寫代碼的,如果你明白了SpringBoot的自動裝配原理,對于后面學習將會更加輕車熟路。

首先對于一個SpringBoot工程來說,最明顯的標志的就是@SpringBootApplication它標記了這是一個SpringBoot工程,所以今天的SpringBoot自動裝配原理也就是從它開始說起。


自動裝配流程分析

首先我們來看下@SpringBootApplication這個注解的背后又有什么玄機呢?

我們按下Ctrl+鼠標左鍵,輕輕的點一下,此時見證奇跡的時刻...

我們看到如下優(yōu)雅的代碼



這其中有兩個比較容易引起我們注意的地方:

一個是@SpringBootConfiguration注解

一個是@EnableAutoConfiguration注解

之所以說這個兩個注解比較吸引我們的眼球,是因為其他的注解我們都比較熟悉,即使不知道他們是干什么的,但也可以肯定跟自動裝配是沒有關系的。

于是我們伸出了邪惡的小手,開啟了熟悉的操作,按下了Ctrl +鼠標左鍵,瞪著色咪咪的小眼睛,瞳孔放大了百倍等待著奇跡的出現(xiàn)...



什么也沒有...... 那我要你有何用,這么頂級的世界級的開源項目,怎么會讓一個沒用的家伙存在呢?于是動用了上億的腦細胞大軍,經(jīng)過復雜的運算,得出了一個不靠譜的結論它可能使用來標記這是一個SpringBoot工程的配置。

因為SpringBootConfiguration翻譯過來就是SpringBoot的配置。

氣定神閑之后,秉承著"失敗是成功之母"的信念, 熟練的左手行云流水般的按下了Ctrl + Table鍵,回到了最初的的地方。

眼睛盯著@EnableAutoConfiguration ,環(huán)顧左右,在地址欄輸入了谷歌翻譯,結果顯示自動裝配。我找的就是你,真是眾里尋他千百度,那人卻在燈火闌珊處。熟練的按下了Ctrl +左鍵。



進入了AutoConfigurationImportSelector.class類,因為谷歌翻譯告訴我們,這個是自動配置導入選擇器。于是我們發(fā)現(xiàn)了一片新天地




而這個自動配置的實體AutoConfigurationEntry里面有兩個屬性,configurations和exclusions。




在后面可以看到getAutoConfigurationEntry()方法返回了一個對象return newAutoConfigurationEntry(configurations, exclusions)這里也就是把我們需要的配置都拿到了。

那這是怎么拿到的候選配置類呢?我們接著看這個獲取候選配置類的方法。



進到方法后我們看到下面這個方法具體獲取候選配置類的方法內容



這里我們跟著斷點去走,首先進入getSpringFactoriesLoaderFactoryClass()方法



接著我們在進入getBeanClassLoader()方法,這里就是一個類加載器



最后我們在進入loadFactoryNames()方法,這個方法就是根據(jù)剛才的字節(jié)碼文件和類加載器來找到候選的配置類。傳遞過來的字節(jié)碼



如下圖:



最后通過loadSpringFactories()來獲取到所有的配置類




這里我們要看下怎么從資源目錄下FACTORIES_RESOURCE_LOCATION加載的下面是加載配置文件的路徑



也就是項目啟動的時候會去加載所有META-INF下的所有的spring.factories文件,我們搜一下這個這個文件,我搭建的是一個最簡單的SpringBoot工程,它會去這三個jar里面找相關的配置類。



但是最后自動裝配的類是這個spring-boot-autoconfigure-2.1.5.RELEASE.jar



而根據(jù)EnableAutoConfiguration.class字節(jié)碼加載的配置類就只有這118自動配置類




實際上SpringBoot的自動裝配原理,其實就是在項目啟動的時候去加載META-INF下的spring.factories文件。

當然在啟動的過程中還會有其他的配置項的加載,這里咱么主要介紹自動裝配的加載過程。希望對大家可以有所啟發(fā)。

標簽: springboot
熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應用線上班 即將爆滿
UI設計全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡安全運營班 爆滿開班
報名優(yōu)惠
免費試聽
課程資料
官方微信
返回頂部
培訓課程 熱門話題 站內鏈接