springboot自動配置是如何實現的?

2021-09-13 22:59:33 字數 2298 閱讀 6068

什麼是springboot自動配置?

​ springboot的自動配置,指的是springboot會自動將一些配置類的bean註冊進ioc容器,我們可以需要的地方使用@autowired或者@resource等註解來使用它。

​ 「自動」的表現形式就是我們只需要引我們想用功能的包,相關的配置我們完全不用管,springboot會自動注入這些配置bean,我們直接使用這些bean即可。

springboot如何實現自動配置?

其實說白了springboot的自動配置,實際是依賴@conditional來實現的。@conditional是乙個條件註解,是spring4提供的乙個新特性,用於根據特定條件來控制bean的建立行為。

看下@conditional的實現:

@target()

@retention

(retentionpolicy.runtime)

@documented

public @inte***ce

conditional

that must

* in order for the component to be registered.

*/class<

?extends

condition

>

value()

;}

conditional 註解類裡只有乙個 value 屬性,是乙個condition 型別的陣列。

看下condition :

@functionalinte***ce

public

inte***ce

condition

* or being checked

* @return if the condition matches and the component can be registered,

* or to veto the annotated component's registration

*/boolean

matches

(conditioncontext context, annotatedtypemetadata metadata)

;}

從注釋中可以得知如果這個方法返回true則會將標註的類註冊到容器中。

方法裡面有兩個引數,annotatedtypemetadata註解元資料類,可以判斷乙個類是否為註解,或獲取乙個註解類的所有屬性以及對應的值。

conditioncontext則是專門為condition服務的乙個介面,可以從中獲取到spring容器的一些物件資訊。

當乙個 bean 被 conditional 註解修飾時,spring容器會對陣列中所有 condition 介面的 matches() 方法進行判斷,當其中所有 condition 介面的matches()方法都為 ture 時,才會建立 bean 。

springboot中對@conditional的引用鏈如下:看下@conditional是如何作用在這些配置類上的,開啟第乙個配置類rabbithealthindicatorautoconfiguration:

@configuration

@conditionalonclass

(rabbittemplate.

class

)@conditionalonbean

(rabbittemplate.

class

)@conditionalonenabledhealthindicator

("rabbit"

)@autoconfigurebefore

(healthindicatorautoconfiguration.

class

)@autoconfigureafter

(rabbitautoconfiguration.

class

)public

class

rabbithealthindicatorautoconfiguration

extends

compositehealthindicatorconfiguration

@bean

@conditionalo****singbean

(name =

"rabbithealthindicator"

)public healthindicator rabbithealthindicator()

}

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