自動配置原理
配置檔案到底能寫什麼?怎麼寫?自動配置原理;
注:
springfactoriesloader.loadfactorynames()
掃瞄所有jar包類路徑下 meta‐inf/spring.factories
把掃瞄到的這些檔案的內容包裝成properties物件
從properties中獲取到enableautoconfiguration.class類(類名)對應的值,然後把他們新增在容器
中將 類路徑下 meta-inf/spring.factories 裡面配置的所有enableautoconfiguration的值加入到了容器中;
每乙個這樣的 ***autoconfiguration類都是容器中的乙個元件,都加入到容器中;用他們來做自動配置;
每乙個自動配置類進行自動配置功能;
以httpencodingautoconfiguration(http編碼自動配置)為例解釋自動配置原理;
@configuration //表示這是乙個配置類,以前編寫的配置檔案一樣,也可以給容器中新增元件
@enableconfigurationproperties(httpencodingproperties.class) //啟動指定類的configurationproperties功能;將配置檔案中對應的值和httpencodingproperties繫結起來;並把httpencodingproperties加入到ioc容器中
@conditionalonclass(characterencodingfilter.class) //判斷當前專案有沒有這個類characterencodingfilter;springmvc中進行亂碼解決的過濾器;
@conditionalonproperty(prefix = "spring.http.encoding", value = "enabled", matchifmissing =true) //判斷配置檔案中是否存在某個配置 spring.http.encoding.enabled;如果不存在,判斷也是成立的
//即使我們配置檔案中不配置pring.http.encoding.enabled=true,也是預設生效的;
@bean //給容器中新增乙個元件,這個元件的某些值需要從properties中獲取
@conditionalo****singbean(characterencodingfilter.class) //判斷容器沒有這個元件?
public characterencodingfilter characterencodingfilter()
}
根據當前不同的條件判斷,決定這個配置類是否生效?
一但這個配置類生效;這個配置類就會給容器中新增各種元件;這些元件的屬性是從對應的properties類中獲取
的,這些類裡面的每乙個屬性又是和配置檔案繫結的;
所有在配置檔案中能配置的屬性都是在***xproperties類中封裝者『;配置檔案能配置什麼就可以參照某個功
能對應的這個屬性類
@configurationproperties(prefix = "spring.http.encoding") //從配置檔案中獲取指定的值和bean的屬
性進行繫結
config中去獲取配置資訊:
@configuration
@slf4j
@enableconfigurationproperties()
public class commonconfiguration {
@autowired
private jobthreadpoolconfig jobthreadpoolconfig;
Spring boot自動配置
1 從原始碼角度看spring boot 自動配置 這個方法呼叫的是 initialize sources suppresswarnings private void initialize object sources this.webenvironment deducewebenvironment...
Spring Boot 自動配置
在spring中假設我們要使用乙個資料來源,必須在配置datasource才能使用,但是使用了spring boot這些就不存在了,相當於spring boot為我們做了很多配置的工作。spring 4提供了乙個更通用的基於條件的bean的建立方式,即使用 conditional 實現conditi...
springboot自動配置
springboot 一.切換條件condition 1.配置類加 configuration,返回值為所需實體類的方法加 bean 2.實體類方法加 conditional x.class 3.類實現condition類重寫它的public boolean matches conditioncon...