SpringBoot之自動配置流程說明

之前我們一起看了Springboot是如何內嵌tomcat的今天我們來說一下SpringBoot 啓動時自動配置 

正如我們看見的只要pom文件裏引了你要的依賴

在使用註解 @Autowired 時就能直接實例化使用 這是怎麼做到的呢。我們下面就來一起看看。

 

首先我們可以看見Springboot啓動時只需要main方法裏運行main方法就可以啓動了

然後加上了一個@SpringbootApplication的註解

那麼Springboot啓動時的配置一定和這個註解有莫大的關係,我們跟進來看一下

可以看到這裏有引入一些註解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited   
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@Documented   註解表明這個註釋是由 javadoc記錄的。 如果一個類型聲明被註釋了文檔化,它的註釋成爲公共API的一部分。

@SpringBootConfiguration 這個就是Springboot的配置,標註這個類是一個配置類@EnableAutoConfiguration允許自自動配置關(關鍵註解) @ComponentScan掃描啓動類同級包下的配置進行實例化。

我們先來說一下@SpringBootConfiguration 我們跟進去可以看見下圖,可以看出這個SpringBootConfiguration只是@Configuration的派生


 

所以我們還是要看@EnableAutoConfiguration 我們跟進來可以看到組合註解@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class) 我們來進入AutoConfigurationImportSelector

我們進入 AutoConfigurationImportSelector 可以看到他一路來找自動配置

我們進入getCandidateConfigurations 可以看到SpringFactoriesLoader.loadFactoryNames,這裏就是來進行Spring工廠加載

我們進來,到這裏我們終於要找到正主了

classLoader.getResources
ClassLoader.getSystemResources 這兩個指向的是同一個文件我們進去看看

 看看我們發現了什麼原來他就是來讀取這個文件中的預配置好的組件

 我們進來文件看看,是不是非常熟悉,就是咱們常用的,這裏也就解釋了爲什麼註解寫一個 @Autowired 就能自動引入了,他就是掃描你的pom文件和這裏看看能不能匹配上如果這裏沒有那麼就只能自己配置@Configuration 來自己啓動時加載。

我們隨便從這個文件中選一個沒有pom文件中沒有引的包看看,看看是不是很多紅色報錯呀。這就對了,你可以再點開這個文件中你再pom文件中引了看看。

 這就是Springboot的厲害之處  加載所有組件你引入的就是綠色 沒引入就是報紅,而且不影響啓動。自動配置能做到如此也是厲害了。

本文只是個人觀點,如有不正確之處,歡迎指出,我會查證修改。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章