傻子學編程(四)之SpringBoot自動配置原理

廢話不說,直奔主題。

首先,從啓動類的@SpringBootApplication點進去,發現一個註解@EnableAutoConfiguration(這是一個接口),

點進去後發現,主要由@AutoConfigurationPackage,@Import(AutoConfigurationImportSelector.class)組成

其中@AutoConfigurationPackage主要是掃描主配置類及子類包,存儲自動配置包供後邊使用,比如JPA包,等等。

我們看一下另一個註解@Import(EnableAutoConfigurationImportSelector.class),這個類繼承自AutoConfigurationImportSelector

主要方法在父類(AutoConfigurationImportSelector)裏面。

第二步,點進去父類看到一個關鍵的方法 selectImports

返回的是一個String數組,加載文件主要有兩個方法,一個是AutoConfigurationMetadataLoader.loadMetadata();

另一個是getCandidateConfigurations();下面會展開介紹這個兩個方法。

loadMetadata()方法

從META-INF/spring-autoconfigure-metadata.properties文件中加載屬性配置

 

getCandidateConfigurations()

從"META-INF/spring.factories"加載自動配置類名

這兩個配置文件到底有什麼區別呢

spring-autoconfigure-metadata.properties 和 spring.factories

舉個例子 在spring.factories中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\

有SpringApplicationAdminJmxAutoConfiguration這個配置類。

點進去這個配置類,會有一些條件註解和後置操作。

在spring-autoconfigure-metadata.properties中找到這個配置類:

org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration.AutoConfigureAfter=org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration

也就是說spring.factories是告訴你有哪些配置類需要加載。

spring-autoconfigure-metadata.properties是對應配置類需要自動裝配的條件。

總結一下

  • 1.啓動類有@SpringBootApplication註解,這個註解包含了@EnableAutoConfiguration註解
  • 2.@EnableAutoConfiguration註解,由@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)組成
  • 3.前者主要是掃描主配置類及子類包,存儲自動配置包;後者調用selectImports方法,將配置類信息交給SpringFactory加載器進行一系列的創建過程,先生成枚舉類對象,再遍歷放到List集合中。
  • 4.其中selectImports方法主要掃描了META-INF下的spring-autoconfigure-metadata.properties 和 spring.factories兩個配置文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章