3 2條件化的bean

2021-10-19 09:00:39 字數 1933 閱讀 2814

如果你希望乙個或者多個bean只有在應用的類路徑夏包含特定的庫的時候才建立。

或者希望某個bean只有當另外某個特定的bean也申明了之後才建立。

某個環境變數設定之後,才建立等等。。。

spring4引入了乙個新的註解,可以用在@bean註解的方法上。如果給定的條件計算結果為true,就會建立這個bean,否則的話,這個bean就會被忽略。

書上的例子不太會配,驗證,我找了乙個別的例子。

@bean

@conditional(magicexistscondition.class)

public magicbean magicbean()

這個bean的配置,@conditional註解上,配置了乙個magicexistscondition,這個類繼承了condition介面。

@functionalinte***ce

public inte***ce condition

這個condition介面,通過判斷,來返回true或者false,來決定這個這個bean是不是被建立!

public class magicexistscondition implements condition 

}

這邊我選擇了乙個比較簡單的判斷法,通過env物件,去獲取操做系統的名字,如果是linux就建立,windows就不建立。

@runwith(springjunit4classrunner.class)

@contextconfiguration(classes = datasourceconfig.class)

//@activeprofiles("dev")

public class testadv

}

這邊有乙個簡單的testcase,可以隨便試試,換一下linux或者windows看看還會不會建立。

這裡的例子是乙個非常簡單的例子,還有更加複雜的例子。

public inte***ce conditioncontext
public inte***ce annotatedtypemetadata
這個介面能夠讓我們檢查帶有@bean註解的方法上還有什麼其他的註解。借助其他的那些方法,我們能夠檢查@bean註解的方法上其他註解的屬性。

@profile的實現

@target()

@retention(retentionpolicy.runtime)

@documented

@conditional(profilecondition.class)

public @inte***ce profile

profile也是使用@conditional註解來判斷這個bean是不是要載入。

class profilecondition implements condition 

}return false;

} return true;

}}

可以看到這個地方的match方法的實現,

1. 通過metadata來獲取這個bean上面profile相關的註解,例如

@profile("dev"),這邊的attrs就會是乙個value->dev
2.只有配置了這個@profile註解的bean才會進入那個if,沒有配置的話就直接返回true,就是需要配置!

3. 進入for loop,看profile裡面value是不是和環境相一致,比如我啟用的profile是dev,那我的環境和dev相同,就會配置那個bean,相反如果是prod,那麼就會是false。

32 條件結構

學習目標 1 掌握pl sql的條件語句語法和使用 2 靈活使用pl sql的條件語句 學習過程 和程式語言一樣pl sql語言也支援條件結構,主要有兩種語法 if語句和case 語句。一 if語句 if 語句根據條件執行一系列語句,有三種形式 if then if then else 和 if t...

Spring高階裝配 二 條件化的bean

如果你希望乙個bean在特定的條件下才會出現 在spring 4之前,很難實現這種級別的條件化配置,但是spring4引入了乙個新的 conditional註解,它可以用到帶有 bean註解的方法上。如果給定的條件計算結果為true,就會建立這個bean,否則的話,這個bean會被忽略。示例 設定了...

3 2 條件編譯的使用分析

1 條件編譯的行為類似於c語言中的if.else 條件編譯是預編譯指示命令,用於控制是否編譯某段 2 條件預編譯技術 ifndef con h 和標頭檔案一樣 define con h endif 3 條件編譯的意義 1 條件編譯使得我們可以按不同的條件編譯不同的 段,因而可以產生不同的目標 2 i...