第二十四節 spring.factories

        有幸參與了公司新框架的開發,大佬們齊思廣義,我很尷尬,啥都不會。老大問我有什麼想法,我想最好的想法就是學習大佬們的想法吧。

META-INF/spring.factories文件

        如何讓我們的starter裏的@Configuration在使用者的項目裏生效呢?

        在SpringBoot的啓動類中,@SpringBootApplication註解的代碼裏面有一句@EnableAutoConfiguration

       

  @ComponentScan註解的作用是掃描@SpringBootApplication所在的Application類(即spring-boot項目的入口類)所在的包(basepackage)下所有的@component註解(或拓展了@component的註解)標記的bean,並註冊到spring容器中。
 

  @EnableAutoConfiguration註解加載的是資源目錄META-INF文件下的spring.factories的文件。包括導入到項目中的Jar包的META-INF文件夾下的spring.factories文件。spring.factories文件是一個properties文件。

        我的spring.factories文件的內容如下。也就是說,其它項目在導入我的這個Jar的時候,會去加載MyConfig與MyConfig2這兩個類。多個類用逗號隔開。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
                      cn.tyzhou.config.MyConfig,cn.tyzhou.config.MyConfig2

        下方就是MyConfig2的代碼。 

ConditionalOnClass與ConditionalOnMissingBean

        @ConditionalOnClass(Gson.class)表示如果編譯路徑下沒有Gson.class依賴,那麼就不會加載這個Bean。但是實際情況是你既然能夠編譯打包成功,一定會有這個文件,除非手動在target文件下刪除了這個class字節碼文件。

        @ConditionalOnMissingBean表示,如果消費者項目(使用我們Jar包的項目)沒有配置Gson這個類,那麼就會爲容器創建一個Gson對象。如果 消費者項目 自己創建了一個配置類,初始化了一個Gson Bean對象,那麼下面的使用@ConditionalMissingBean的方法就不會執行。

@Configuration
@ConditionalOnClass(Gson.class)
public class MyConfig2 {


    @Bean
    @ConditionalOnMissingBean
    public Gson gson() {
        return new Gson();
    }
}

        參考文章:EnableAutoConfiguration註解的工作原理 二月_春風

                          爲什麼我要寫spring.factories文件?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章