什麼是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...