Spring Boot的自動配置給開發(fā)者帶來了很大的便利,當開發(fā)人員在pom文件中添加starter依賴后,maven或者gradle會自動下載很多jar包到classpath中。當Spring Boot檢測到特定類的存在,就會針對這個應(yīng)用做一定的配置,自動創(chuàng)建和織入需要的spring bean到程序上下文中。
在之前的文章中,我們只是在pom文件中增加各種starter的依賴,例如:spring-boot-starter-data-jpa, spring-boot-starter-web, spring-boot-starter-data-test等等。接下來將在之前的工程的基礎(chǔ)上,觀察在程序的引導(dǎo)啟動過程中,Spring Boot通過自動配置機制幫我們做了哪些工作。
DEBUG=true mvn spring-boot:run
啟動應(yīng)用程序;http://wiki.jikexueyuan.com/project/spring-boot-cookbook-zh/images/cd.png" alt="Positive matches" />
http://wiki.jikexueyuan.com/project/spring-boot-cookbook-zh/images/7.png" alt="Negative matches" />
可以看到,后臺輸出的自動配置信息特別多,好幾頁屏幕,沒辦法一一分析,在這里選擇一個postive match和negative match進行分析。
Spring Boot通過配置信息指出:特定配置項被選中的原因、列出匹配到對應(yīng)類的配置項(positive match)、不包括某個配置項的原因(negative match)?,F(xiàn)在以DataSourceAutoConfiguration舉例說明:
OnClassCondition是最普遍的瀏覽探測條件,除此之外,Spring Boot也使用別的探測條件,如:OnBeanCondition用于檢測指定bean實例存在與否、OnPropertyCondition用于檢查指定屬性是否存在等等。
符合negative match代表一些配置類(xxxConfiguration之類的),它們雖然存在于classpath目錄,但是修飾它們的注解中依賴的其他類不存在。導(dǎo)入如果在pom文件中導(dǎo)入spring-boot-autoconfigure包,則GsonAutoConfiguration就會出現(xiàn)在classpath目錄下,但是該配置類被@ConditionalOnClass(Gson.class)
修飾,而com.google.gson.Gson類不在classpath目錄。
@Configuration
@ConditionalOnClass({Gson.class})
public class GsonAutoConfiguration {
public GsonAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean
public Gson gson() {
return new Gson();
}
}
@ConditionOnMissingBean(name = "example")
,這個表示如果name為“example”的bean存在,這該注解修飾的代碼塊不執(zhí)行。