咱們都知道,使用SpringBoot開發項目很是簡便,在以往的SSM框架中,每每會由於一大堆的密密麻麻的xml配置文件而糟心不已。自從SpringBoot的出現,改變了這個現狀。咱們每每只須要去關注業務實現而不須要去過多分心與固定的且繁瑣的配置。而SpringBoot自動裝配即是其中一大功臣。
接下來,直接進入正題吧。來了解一下,SpringBoot的自動裝配是如何實現的~
## 從啓動類入手
這是springBoot啓動類,啓動項目從這裏運行。那麼咱們看看這個註解包含了什麼吧~
能夠看到在SpringBootApplication
接口上有好些註解,下表大概介紹了一下註解的用處
|註解名字|註解做用|
|:-------:|:-------:|
|@Target|註解的做用目標:就是你的註解能夠寫在哪一個目標上。好比圖中的Element.TYPE
,則表明接口,類,枚舉,註解|
|@Retention|保留策略:圖中代碼爲RetentionPolicy.RUNTIME
表明運行時保留|
|@Documented|生成java文檔|
|@Inherited|表示該父類註解會被子類繼承|
|@SpringBootConfiguration|標註該類是配置類|
|@EnableAutoConfiguration|重點:自動裝配配置|
|@ComponentScan|掃描組件| java
雖然這麼多註解,可是其實重要的就是@EnableAutoConfiguration
,接下來咱們也會對這個註解進行深刻分析。
## 從自動配置註解深刻
咱們點擊進入@EnableAutoConfiguration
註解,能夠發現:
這個@Import
導入註解又是咱們的核心,它傳入一個自動配置導入選擇器的類。(看這名字起得,一看就知道和自動配置導入有關係了!)
## 如何導入自動配置
在這個AutoConfigurationImportSelector
類中有這麼一個方法spring
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; }
看這方法名起得,(獲取候選配置),正是在下所要找的。方法掃描META-INF/spring.factories
這個文件裏的東東來完成自動配置。看到斷言了嗎,返回配置後,斷言配置不爲空,若是空了,就說明沒有找到自動配置的類。接下來就是找這個文件了,看看裏面是些啥東西~
## spring.factories揭祕.
這就是很清楚了,就是一堆KV鍵值對,key是EnableAutoConfiguration
全類名,value則是一大堆全類名列表,表明了自動裝配的類。
## 總結
本質來講,自動裝配就是經過配置文件以kv的形式把咱們所常常須要配置的類固定到springBoot中,而再也不須要咱們去手動配置了。反正每次配置都差很少,何須每一個項目都去配置呢,對吧!框架