SpringBoot自動配置原理

2021-10-11 18:59:45 字數 2469 閱讀 4142

1、上述在掃瞄jar包類路徑下所有meta-inf/spring.factories檔案,把每乙個都封裝成properties。然後在properties中找key為org.springframework.boot.autoconfigure.enableautoconfiguration對應的值,並都放在reslut中,遍歷結束後,reslut也就以list方式儲存了所有自動配置類的全類名了。目標spring.factories其實放在springboot-autoconfigurature包中,同時,這些自動配置類也放在該包下。

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

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

@conditionalonproperty(prefix = "spring.http.encoding", value = "enabled", matchifmissing = true) :判斷配置檔案中是否存在某個配置spring.http.encoding.enabled;如果不存在,判斷也是成立的

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

@configuration

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

)//啟動指定類的configurationproperties功能(因為httpecondingproperties沒有加@compenent等註解,因此沒有加到ioc容器中);將配置檔案中對應的值和httpencodingproperties繫結起來;並把httpencodingproperties加入到ioc容器中

//spring底層@conditional註解(spring註解版),根據不同的條件,如果滿足指定的條件,整個配置類裡面的配置就會生效; 判斷當前應用是否是web應用,如果是,當前配置類生效

@conditionalonclass

(characterencodingfilter.

class

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

)//判斷配置檔案中是否存在某個配置 spring.http.encoding.enabled;如果不存在,判斷也是成立的

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

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

@conditionalo****singbean

(characterencodingfilter.

class

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

public characterencodingfilter characterencodingfilter()

自動配置原理就是:注:@import(enableautoconfigurationimportselector.class)如何呼叫到selectimports()方法在這裡就沒有詳細去講。總之selectimports以list的形式返回所有自動配置類的全類名,然後註冊到ioc容器中。若想深入了解,可以了解一下springboot中的spi機制,這裡提供了一篇不錯的文章可供參考springboot中spi機

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