如果你希望乙個或者多個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...