SpringBoot自動配置

SpringBoot自動配置原理(筆記)

1. 配置文件到底是什麼?怎麼寫?

自動配置原理

  1. SpringBoot啓動的時候加載主配置類,開啓了自動配置功能@EnableAutoConfiguration
  2. @EnableAutoConfiguration作用:
    1) 利用EnableAutoConfigurationImportSelector給容器中添加一些組件;
    2)可以查看selectImports()方法的內容;
    3)List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);//獲取候選的配置
SpringFactoriesLoader.loadFactoryNames()
掃描所有類路徑下的 META-INT/spring.factories
把掃描到的這些文件的內容包裝成properties對象
從properties中獲取到的EnableAutoConfiguration.class類對應的值,然後把它們添加到容器中

總結:將類路徑下META-INF下的Spring.factories裏面配置的所有EnableAutoConfiguration的值加入到了容器中

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\                                                                                                                                                                                                                                                                                                                                             

每一個這樣的 **AutoConfiguration類都是容器中的一個組件,都加入到容器中,用它們來做自動配置
3. 每一個自動配置類進行自動配置功能;
4. 以HttpEncodingAutoConfiguration (Http編碼自動配置)爲例解釋自動配置原理;

@Configuration(
   proxyBeanMethods = false
)
//1.表示這是一個配置類,類似於以前寫的配置文件,配置類也可以給容器中添加組件
@EnableConfigurationProperties({HttpProperties.class})
//2.啓用ConfigurationProperties功能,將配置文件中的值和HttpEncodingProperties綁定起來
@ConditionalOnWebApplication(
   type = Type.SERVLET
)
//3.判斷當前應用是否是web應用。如果是,那麼當前配置類就生效
@ConditionalOnClass({CharacterEncodingFilter.class})
//4.判斷當前項目中有沒有這個類:CharacterEncodingFilter(這是SpringMVC中進行亂碼解決的過濾器)
@ConditionalOnProperty(
   prefix = "spring.http.encoding",
   value = {"enabled"},
   matchIfMissing = true
)
//5.判斷配置文件中是否存在某個配置:spring.http.encoding.enabled,如果不存在,判斷也是成立的
public class HttpEncodingAutoConfiguration {

**小結:**根據當前不同的條件判斷,決定這個配置類是否生效
一旦這個配置類生效,這個配置類就會給容器中添加各種組件。這些組件的屬性是從對應的properties類中獲取的,這些類中的每一個屬性又是和配置文件綁定的。
5. 所有在配置文件中能配置的屬性都是在 **Properties類中封裝着,配置文件能配什麼屬性就可以參照某個功能對應的這個屬性類
簡而言之,我們能配什麼屬性都是來源於這個功能的properties類

2. SpringBoot的精髓

  1. SpringBoot啓動會加載大量的自動配置類;
  2. 我們看我們需要的功能有沒有SpringBoot寫好的自動配置類;
  3. 我們再來看這個自動配置類中到底配置了哪些組件(如果有我們需要的組件,我們就不需要再配置了);
  4. 給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性,我們就可以在配置文件中綁定某些屬性的值。
***AutoConfiguration:自動配置類,負責給容器中添加組件
***Properties:封裝配置文件中的相關屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章