Spring Boot 自動配置原理

2021-09-23 13:56:03 字數 2044 閱讀 4686

自動配置原理

配置檔案到底能寫什麼?怎麼寫?自動配置原理;

注:      

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...