歡迎光臨
每天分享高質量文章

Spring Boot:配置是否初始化Bean

在Spring Boot:定製自己的starter(https://www.jianshu.com/p/85460c1d835a)一文提到,只要DbCountRunner這個類在classpath路徑下,Spring Boot會自動建立對應的spring bean並新增到應用程式背景關係中。

在文章最後提到,Spring Boot的自動配置機制依靠@ConditionalOnMissingBean註解判斷是否執行初始化程式碼,即如果使用者已經建立了bean,則相關的初始化程式碼不再執行。

現在在上篇文章的基礎上進行演示,看看@ConditionalOnMissingBean註解的作用。

How Do

  • 在pom檔案中增加依賴

  1.    org.springframework.boot

  •    spring-boot-autoconfigure

    • DbCountAutoConfiguration類中新增@ConditionalOnMissingBean註解,如下所示:

    1. @Configuration

    2. public class DbCountAutoConfiguration {

    3.    @Bean

    4.    @ConditionalOnMissingBean

    5.    public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {

    6.        return new DbCountRunner(repositories);

    7.    }

    8. }

    • 啟動應用程式後,看到跟上篇文章相同的結果;

    • 修改日誌級別為DEBUG,可以看到DbCountAutoConfiguration屬於Positive match組。 

    • 在BookPubApplication類中定義DbCountRunner的spring bean

    1. @Bean

    2. public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories) {

    3.    return new DbCountRunner(repositories) {

    4.        @Override

    5.        public void run(String... strings) throws Exception {

    6.            logger.info("Manually Declared DbCountRunner");

    7.        }

    8.    };

    9. }

    • 再次執行程式,觀察結果,可以看到這個配置資訊放在Negative matchs組中,顯示判斷條件不匹配,因為已經找到dbCountRunner這個bean。 

    贊(0)

    分享創造快樂