1. 程式人生 > >springboot的自動配置原理/步驟

springboot的自動配置原理/步驟

1、SpringBoot啟動的時候載入主配置類(@SpringBootApplication),開啟了自動配置功能 @EnableAutoConfiguration。 

2、@EnableAutoConfiguration 作用: 

        利用AutoConfigurationImportSelector給容器中匯入一些元件;可以檢視selectImports()方法的內容;
        將類路徑下 META-INF/spring.factories 裡面配置的所有AutoConfiguration的值加入到了容器中;

         每一個這樣的 xxxAutoConfiguration類都是容器中的一個元件,都加入到容器中;用他們來做自動配置;

3、每一個自動配置類進行自動配置功能;

4、以HttpEncodingAutoConfiguration(Http編碼自動配置)為例解釋自動配置原理;
       一但這個配置類生效,這個配置類就會給容器中新增各種元件,這些元件的屬性是從對應的properties類中獲取的,這些類裡面的每一個屬性又是和配置檔案繫結的;

      a、@Configuration //表示這是一個配置類,也可以給容器中新增元件
   b、@EnableConfigurationProperties//啟動指定類的ConfigurationProperties功能;將配置檔案中對應的值和HttpEncodingProperties繫結起來;並把HttpEncodingProperties加入到ioc容器中 。 

         所有在配置檔案中能配置的屬性都是在xxxxProperties類中封裝著;該類中有什麼屬性,配置檔案就可以配置什麼;@ConfigurationProperties(prefix = "spring.http.encoding") //從配置檔案中獲取指定的值和bean的屬性進行繫結。

       c、@ConditionalOnWebApplication //Spring底層@Conditional註解:根據不同的條件,如果滿足指定的條件,整個配置類裡面的配置就會生效; 判斷當前應用是否是web應用,如果是,當前配置類生效
    d、@ConditionalOnClass(CharacterEncodingFilter.class) //判斷當前專案有沒有CharacterEncodingFilter這個類;CharacterEncodingFilter類是SpringMVC中進行亂碼解決的過濾器;
       e、@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing=true) //判斷配置檔案中是否存在 spring.http.encoding.enabled這個配置;如果不存在,判斷也是成立的