假設你希望某個 bean 只有在滿足某個條件的時候才會建立,spring 4 引入了乙個新的 @conditional 註解,它可以用到帶有 @bean 註解的方法上,如果給定的條件結果為 true,則建立這個 bean,否則,這個 bean 會被忽略。
以下是乙個示例:
@bean
@conditional(magicexistscondition.class)
public magicbean magicbean()
注意到,magicbean 方法被 @conditional 註解修飾,值為 magicexistscondition.class。
magicexistscondition.class:
public class magicexistscondition implements condition
}
作為 @conditional 註解的值的類必須實現 condition 介面,condition 介面只有乙個返回型別為 boolean 的 matches() 方法,spring 將根據 matches() 方法的返回值來決定是否建立 bean,在上例中,matches() 方法檢查環境中是否存在名為 magic 的環境屬性,屬性的值是什麼無所謂,只要存在這個屬性,matches() 方法就會返回 true,所帶來的結果就是條件能夠得到滿足,所有 @conditional 註解上引用 magicexistscondition 的 bean 都會被建立。
condition 介面:
public inte***ce condition
matches() 方法通過 conditioncontext 和 annotatedtypemetadata 來做出決策。
conditioncontext 介面:
public inte***ce conditioncontext
通過 conditioncontext 介面,我們可以做到如下幾點:
annotatedtypemetadata介面:
public inte***ce annotatedtypemetadata
Spring4的條件化bean
假設希望乙個或多個bean只有在應用的類路徑下包含特定的庫時才建立。或者希望某個bean只有當另外的某個特定的bean也宣告了之後才會建立,或者還可能要求只有某個特定的環境變數設定之後,才會建立bean,spring4之前很難實現這種級別的條件化配置,因此spring4的條件化bean就是這樣應運而...
spring高階裝配 條件化的bean
conditional註解的使用 bean conditional magicexistscondition.class public magicbean magicbean conditional將會通過condition介面進行條件對比 public inte ce conditionpacka...
spring實戰 條件裝配bean
在做大型專案時,我們的系統會有多個執行環境,如開發人員自己的本地環境dev,測試人員的測試環境sit,上線前的預生產環境pre,線上環境prd 在不同環境中我們可能需要不同的配置,如資料庫配置,mq配置等,在不同的環境都有相應的不同的配置,這時候我們需要根據不同的環境來建立不同的配置 強大的spri...