Spring Boot的自動配置

2021-10-04 03:20:17 字數 1526 閱讀 6566

基於條件的自動配置**於 spring 框架中「基於條件的配置」這一特性。在 spring 框架中,我們可以使用 @conditional 這個 annotation 配合 @configuration 或者 @bean 等 annotation 來干預乙個配置或者 bean 定義是否能夠生效,其最終實現的效果或者語義類似於如下偽**:

if(符合 @conditional 規定的條件)
要實現基於條件的配置,我們只要通過 @conditional 指定自己的 condition 實現類就可以了(可以應用於型別 type 的標註或者方法 method 的標註):

@conditional()
最主要的是,@conditional 可以作為乙個 meta annotation 用來標註其他 annotation 實現類,從而構建各色的復合 annotation,比如 springboot 的 autoconfigure 模組就基於這一優良的革命傳統,實現了一批 annotation(位於 org.springframework.boot.autoconfigure.condition 包下),條件註解如下:

有了這些復合 annotation 的配合,我們就可以結合 @enableauto-configurationn 實現基於條件的自動配置了。

springboot 能夠風靡,很大一部分功勞需要歸功於它預先提供的一系列自動配置的依賴模組,而這些依賴模組都是基於以上 @conditional 復合 annotation 實現的,這也意味著所有的這些依賴模組都是按需載入的,只有符合某些特定條件,這些依賴模組才會生效,這也就是我們所謂的「智慧型」自動配置。

在實現自動配置的過程中,除了可以提供基於條件的配置,我們還可以對當前要提供的配置或者元件的載入順序進行相應調整,從而讓這些配置或者元件之間的依賴分析和組裝可以順利完成。

我們可以使用 @org.springframework.boot.autoconfigure.autoconfigurebefore 或者 @org.springframework.boot.autoconfigure.autoconfigureafter 讓當前配置或者元件在某個其他元件之前或者之後進行,比如,假設我們希望某些 jmx 操作相關的 bean 定義在 mbeanserver 配置完成之後進行,那麼我們就可以提供乙個類似如下的配置:

@configuration

@autoconfigureafter(jmxautoconfiguration.class)

public class aftermbeanserverreadyconfiguration

至此,我們對 springboot 的核心元件完成了基本的剖析,綜合來看,大部分的東西都是 spring 框架背後原有的一些概念和實踐方式,springboot 只是在這些概念和實踐方式上對特定的場景實現進行了固化和昇華,而也恰恰是這些固化讓我們開發基於 spring 框架的應用更加方便高效。

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