springboot自動配置原理初探

2021-10-03 20:10:39 字數 2914 閱讀 7482

一配置檔案:當同乙個目錄下同時存在properties和yml檔案時,會優先載入properties檔案裡的內容,兩個檔案中的內容會進行互補操作,即springboot會讀取兩份檔案中的所有內容,會載入所有不同的配置項,匯成乙個總的配置。

如果同乙個配置兩個檔案中都存在,那麼properties中的配置會被載入,而忽略yml檔案中的配置。

那麼配置檔案到底能寫什麼?怎麼寫?先分析自動裝配的原理

二自動裝配原理

以httpencodingautoconfiguration(http編碼自動配置)為例解釋自動配置原理;

首先找一下這個httpencodingautoconfiguration

我們ctrl進入httpencodingautoconfiguration裡面

其固有規律是:

***autoconfiguraton:預設值 , import ***properties 和配置檔案進行繫結我們就可以自定義配置類

//表示這是乙個配置類,和以前編寫的配置檔案一樣,也可以給容器中新增元件;

@configuration

//啟動指定類的configurationproperties功能;

//進入這個httpproperties檢視,將配置檔案中對應的值和httpproperties繫結起來;

//並把httpproperties加入到ioc容器中

@enableconfigurationproperties()

//spring底層@conditional註解

//根據不同的條件判斷,如果滿足指定的條件,整個配置類裡面的配置就會生效;

//這裡的意思就是判斷當前應用是否是web應用,如果是,當前配置類生效

( type = type.servlet

)//判斷當前專案有沒有這個類characterencodingfilter;springmvc中進行亂碼解決的過濾器;

@conditionalonclass()

//判斷配置檔案中是否存在某個配置:spring.http.encoding.enabled;

//如果不存在,判斷也是成立的

//即使我們配置檔案中不配置pring.http.encoding.enabled=true,也是預設生效的;

//給容器中新增乙個元件,這個元件的某些值需要從properties中獲取

@bean

@conditionalo****singbean

//判斷容器沒有這個元件?

public characterencodingfilter characterencodingfilter()

//。。。。。。。

}

一句話總結 :根據當前不同的條件判斷,決定這個配置類是否生效!

一但這個配置類生效;這個配置類就會給容器中新增各種元件;

這些元件的屬性是從對應的properties類中獲取的,這些類裡面的每乙個屬性又是和配置檔案繫結的;

所有在配置檔案中能配置的屬性都是在***xproperties類中封裝著;

配置檔案能配置什麼就可以參照某個功能對應的這個屬性類

這就是自動裝配的原理!

精髓

1、springboot啟動會載入大量的自動配置類

2、我們看我們需要的功能有沒有在springboot預設寫好的自動配置類當中;

3、我們再來看這個自動配置類中到底配置了哪些元件;(只要我們要用的元件存在在其中,我們就不需要再手動配置了)

4、給容器中自動配置類新增元件的時候,會從properties類中獲取某些屬性。我們只需要在配置檔案中指定這些屬性的值即可;

***xautoconfigurartion:自動配置類;給容器中新增元件

***xproperties:封裝配置檔案中相關屬性;

@conditional

自動配置類必須在一定的條件下才能生效;

@conditional派生註解(spring註解版原生的@conditional作用)

作用:必須是@conditional指定的條件成立,才給容器中新增元件,配置配裡面的所有內容才生效;

通過啟用 debug=true屬性;來讓控制台列印自動配置報告,這樣我們就可以很方便的知道哪些自動配置類生效

positive matches:(自動配置類啟用的:正匹配)

negative matches:(沒有啟動,沒有匹配成功的自動配置類:負匹配)

unconditional classes: (沒有條件的類)

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