在Spring Boot:定製自己的starter(https://www.jianshu.com/p/85460c1d835a)一文提到,只要DbCountRunner這個類在classpath路徑下,Spring Boot會自動建立對應的spring bean並新增到應用程式背景關係中。
在文章最後提到,Spring Boot的自動配置機制依靠@ConditionalOnMissingBean註解判斷是否執行初始化程式碼,即如果使用者已經建立了bean,則相關的初始化程式碼不再執行。
現在在上篇文章的基礎上進行演示,看看@ConditionalOnMissingBean註解的作用。
How Do
-
在pom檔案中增加依賴
org.springframework.boot
-
在DbCountAutoConfiguration類中新增@ConditionalOnMissingBean註解,如下所示:
@Configuration
public class DbCountAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {
return new DbCountRunner(repositories);
}
}
-
啟動應用程式後,看到跟上篇文章相同的結果;
-
修改日誌級別為DEBUG,可以看到DbCountAutoConfiguration屬於Positive match組。
-
在BookPubApplication類中定義DbCountRunner的spring bean
@Bean
public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {
return new DbCountRunner(repositories) {
@Override
public void run(String... strings) throws Exception {
logger.info("Manually Declared DbCountRunner");
}
};
}
-
再次執行程式,觀察結果,可以看到這個配置資訊放在Negative matchs組中,顯示判斷條件不匹配,因為已經找到dbCountRunner這個bean。