Spring4的條件化bean

2021-08-14 17:56:54 字數 1056 閱讀 3386

假設希望乙個或多個bean只有在應用的類路徑下包含特定的庫時才建立。或者希望某個bean只有當另外的某個特定的bean也宣告了之後才會建立,或者還可能要求只有某個特定的環境變數設定之後,才會建立bean,spring4之前很難實現這種級別的條件化配置,因此spring4的條件化bean就是這樣應運而生的。

1.spring4引入了乙個新的@conditional註解,它可以用到帶有@bean的註解的方法上。如果給定的條件計算結果為true,就會建立這個bean,反之則不會。

@bean

@conditional(magicexistcondition.class)

public magicbean magicbean()

上面的**中,@conditional中給定了乙個class,它指明了條件—在本例中,也就是magicexistcondition.class。@conditional將會通過介面進行條件對比:

public

inte***ce condition

設定給@conditional的類可以是任意實現了condition介面的型別。這個介面實現只需要提供matches()方法的實現即可。如果matches()方法返回的true,那麼就會建立帶有@conditional註解的bean,否則不會建立帶有@conditional註解的bean(方法返回時false)。

public

class

magicexistscondition

implements

condition

}

上述的方法中,如果最終系統環境存在名為「magic」的系統屬性,則方法返回結果為true,說明@conditional註解上引用magicexistscondition 的bean會被建立,反之則不會。

conditioncontext是乙個介面,可以通過它做到以下幾點:

annotatedtypemetadata則能夠讓我們檢查帶有@bean註解的方法上還有什麼其他的註解。此處不做介紹。

上網查到一篇不錯的關於條件化bean的文章:

Spring 條件化建立bean

假設你希望某個 bean 只有在滿足某個條件的時候才會建立,spring 4 引入了乙個新的 conditional 註解,它可以用到帶有 bean 註解的方法上,如果給定的條件結果為 true,則建立這個 bean,否則,這個 bean 會被忽略。以下是乙個示例 bean conditional ...

spring高階裝配 條件化的bean

conditional註解的使用 bean conditional magicexistscondition.class public magicbean magicbean conditional將會通過condition介面進行條件對比 public inte ce conditionpacka...

spring 4 註解實體

1.建立實體 repository 適用於dao層 service 適用於service controller 適用於web service用於標註業務層元件 controller用於標註控制層元件 如struts中的action repository用於標註資料訪問元件,即dao元件 compon...