SpringBoot自動配置原理

隨著SpringBoot的大規(guī)模使用,我們有必要來了解一下SpringBoot底層是如何為我們進(jìn)行一系列配置的

這是一個SpringBoot的啟動類,運(yùn)行該類就能啟動我們的SpringBoot服務(wù)

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }

}

我們查看一下這個啟動類上的@SpringBootApplication這個注解乎莉,這個注解實(shí)際上是一個復(fù)合注解易遣,我們點(diǎn)進(jìn)去可以看到這個注解還包含了其他的幾個注解扔仓,@SpringBootConfiguration、@EnabLeAutoConfiguration仰挣、@componentscan

@SpringBootConfiguration和@componentscan

@SpringBootConfiguration注解就是一個@Configuration,代表當(dāng)前是一個配置類缠沈,而@componentscan的含義是指定掃描那些位置膘壶,自動配置的關(guān)鍵在于第三個注解@EnabLeAutoConfiguration (開啟自動配置)

@EnabLeAutoConfiguration

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
  String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

  Class<?>[] exclude() default {};

  String[] excludeName() default {};
}

這個注解也是一個復(fù)合注解,里面包含了@AutoConfigurationPackage(自動配置包)博烂,同時這個自動配置包的注解里面又包含一個@Import(AutoConfigurationPackages.Registrar.class)香椎,這個注解的意思是給容器中導(dǎo)入一個Registrar組件

@AutoConfigurationPackage

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(AutoConfigurationPackages.Registrar.class)//給容器中導(dǎo)入一個組件
public @interface AutoConfigurationPackage {
    String[] basePackages() default {};

    Class<?>[] basePackageClasses() default {};
}

Registrar

Registrar中有兩個方法,參數(shù)為AnnotationMetadata,這個參數(shù)中記錄了當(dāng)前注解標(biāo)注的類的信息禽篱,包括類的位置畜伐,包路徑之類的信息,利用Registrar給容器中批量的添加組件躺率,添加的范圍是@EnabLeAutoConfiguration這個注解標(biāo)注的類的所在包玛界,也就是我們springBoot的啟動類所在的包,這樣就解釋了為什么我們經(jīng)常說啟動類包下的所有資源都會加載之類的

@Import(AutoConfigurationImportSelector.class)

接下來說說@EnabLeAutoConfiguration的最后一個注解悼吱,用getAutoConfigurationEntry(annotationMetadata);給容器中批量導(dǎo)入一些組件慎框,調(diào)用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)獲取到所有需要導(dǎo)入到容器中的配置類,利用工廠加載 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的組件后添,從META-INF/spring.factories位置來加載一個文件笨枯。默認(rèn)掃描我們當(dāng)前系統(tǒng)里面所有META-INF/spring.factories位置的文件, spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

總結(jié)

SpringBoot的自動配置關(guān)鍵的注解是@EnabLeAutoConfiguration遇西,這個注解里面包含了包掃描規(guī)則以及spring-boot-autoconfigure-2.3.4.RELEASE.jar包中有META-INF/spring.factories路徑下配置寫死的需要配置的文件信息馅精,雖然里面的所有都會被加載,但是實(shí)際上還是遵循的按需加載原則粱檀,因?yàn)槔锩婧芏鄕xxxAutoConfiguration是需要我們導(dǎo)入了相關(guān)的依賴才能成功加載的洲敢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茄蚯,隨后出現(xiàn)的幾起案子压彭,更是在濱河造成了極大的恐慌睦优,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壮不,死亡現(xiàn)場離奇詭異汗盘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)询一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門衡未,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人家凯,你說我怎么就攤上這事缓醋。” “怎么了绊诲?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵送粱,是天一觀的道長。 經(jīng)常有香客問我掂之,道長抗俄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任世舰,我火速辦了婚禮动雹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘跟压。我一直安慰自己胰蝠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布震蒋。 她就那樣靜靜地躺著茸塞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪查剖。 梳的紋絲不亂的頭發(fā)上钾虐,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機(jī)與錄音笋庄,去河邊找鬼效扫。 笑死,一個胖子當(dāng)著我的面吹牛直砂,可吹牛的內(nèi)容都是我干的菌仁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼哆键,長吁一口氣:“原來是場噩夢啊……” “哼掘托!你這毒婦竟也來了瘦锹?” 一聲冷哼從身側(cè)響起籍嘹,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闪盔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辱士,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泪掀,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年颂碘,在試婚紗的時候發(fā)現(xiàn)自己被綠了异赫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡头岔,死狀恐怖塔拳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峡竣,我是刑警寧澤靠抑,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站适掰,受9級特大地震影響颂碧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜类浪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一载城、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧费就,春花似錦诉瓦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艳汽,卻和暖如春猴贰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背河狐。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工米绕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馋艺。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓栅干,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捐祠。 傳聞我的和親對象是個殘疾皇子碱鳞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容