spring boot自動裝配原理(二)

語言: CN / TW / HK

theme: cyanosis

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第29天,點選檢視活動詳情

spring boot通過maven的形式載入好所有已經配置好的版本包載入到專案中,然後通過@SpringBootApplication複合註解載入啟動整個專案,@SpringBootApplication是一個複合註解,它除了四個元註解之外還有以下幾個註解組成,也是 spring boot 重要組成部分。

@SpringBootConfiguration

進入到@SpringBootConfiguration註解中發現除了四個元註解之外還有一個@Configuration註解

image.png

然後再看它下面的屬性取的是proxyBeanMethods它取得來源其實也是來源於@Configuration裡面

image.png

進入到@Configuration裡面可以看到有一個proxyBeanMethods

image.png

所以@SpringBootConfiguration註解其實就是@Configuration註解,proxyBeanMethods的值為true代表著預設使用CGLIB代理該類。@Configuration可以保證絕對的單例。

@EnableAutoConfiguration

同樣的點進這個註解裡面去看看,除了四個元註解需要注意的就是@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)

@AutoConfigurationPackage

@AutoConfigurationPackage註解的功能主要是由@Import註解實現的,它是spring框架的底層註解,它的作用就是給容器中匯入某個元件類,比如@Import(AutoConfigurationPackages.Registrar.class)它就會將Registrar元件類匯入到容器中。

@Import

spring boot的核心註解,主要的作用有: - 引數如果是普通類,將該類例項化交給IOC容器管理 - 引數如果是ImportBeanDefintionRegistrar的實現類,支援手工註冊bean - 引數如果是ImportSelector的實現類,註冊selectImports返回陣列,陣列內的內容是類的全路徑,並放至Ioc容器中進行批量註冊,簡單點說就是如果是普通類那麼就會將該類例項化交給IOC容器管理,什麼是普通類就是除開上面兩種情況都是普通類。

@ComponentScan

定義包的掃描規則並指定掃描包的路徑,如果它不填寫value的話就會掃描所在的包和子包