先看看SpringBoot自動裝配的原理,看了源碼原理後就明白爲什麼可以自定義Starter了
@SpringBootApplication是必須的,在Application啓動類上的一個註解,大家都知道,就從@SpringBootApplication入手,點擊進去是很多註解的組合,每個註解就不多做解釋了
重點看@EnableAutoConfiguration,它是自動裝配的整個邏輯,再點擊去,關鍵信息@Import(AutoConfigurationImportSelector.class)
這裏也分版本,有些版本是EnableAutoConfigurationImportSelector,1.4.3版本就是(如下圖),不過邏輯實現都差不多
我目前版本是2.2.7,是AutoConfigurationImportSelector
着重介紹下@Import註解,@Import註解的參數可以是靜態類(用作直接導入)也可以是實現了ImportSelector接口的類,當是實現了ImportSelector會根據實現的selectImports方法來對類進行導入。
AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader)方法是加載項目的基本配置數據getAutoConfigurationEntry(autoConfigurationMetadata,annotationMetadata)方法則是自動裝配的邏輯
關鍵方法:getCandidateConfigurations(annotationMetadata, attributes); 繼續跟下去
最後在這裏加載的配置文件spring.factories,在META-INF目錄下
看下依賴包下,確實是有此文件的
打開一探究竟
好傢伙,一大片各種配置類,啥redis/mongo/elasticsearch/jpa等等通通在裏面
就拿org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration來說,這個是redis的
還有很多其他配置信息,就不一一截圖了
application.yml
直接就配置上了,這也就是爲什麼只要配置相關信息,我們就可以用,SpringBoot自動裝配的原理