国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Spring基于@Conditional條件化裝配bean

瀏覽:2日期:2023-09-10 10:09:07

一 前言

理解spring的如何根據(jù)條件裝配bean有助于我們更好使用springboot進(jìn)行開發(fā),和源碼理解;

@Conditional 裝配bean

思路如下

Spring中提供了@Conditional注解實(shí)現(xiàn)條件化是否裝配bean,這樣可以根據(jù)條件動(dòng)態(tài)的裝配bean;

要判定@Conditional 注解是否該裝配bean還需要Condition 接口配合,我們只須實(shí)現(xiàn) Condition 接口,重寫matches 方法;

根據(jù)matches方法返回的布爾值進(jìn)行判定@Conditional是否需要裝配bean

實(shí)現(xiàn)過程如下

2.1 用戶類

用戶類用于配置類是否裝配該Bean

/** * @Author lsc * <p> </p> */public class User { private String userName;// 省略 set get}

2.2 Condition實(shí)現(xiàn)類

RuntimeExist 實(shí)現(xiàn) Condition ,使用 conditionContext 獲取jvm 環(huán)境變量,如果存在則返回 true ,否則返回false;其中conditionContext還有如下方法

getRegistry():使用BeanDefinitionRegistry的檢查bean定義; getBeanFactory():使用ConfigurableListableBeanFactory檢查bean是否存在; getEnvironment():Environment環(huán)境變量 getResourceLoader():ResourceLoader加載的資源; getClassLoader():ClassLoader加載的類。

public class RuntimeExist implements Condition { public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { // 獲取jvm 運(yùn)行時(shí)環(huán)境 Environment environment = conditionContext.getEnvironment(); // 檢查 jvm 運(yùn)行時(shí)環(huán)境是否存在屬性 return environment.containsProperty('java.runtime.name'); }}

2.3 用戶配置類

根據(jù) RuntimeExist的 matches 方法的返回值 是否裝配bean; 這邊設(shè)置了屬性名稱 zszxz,以便于更好的測試;

/** * @Author lsc * <p> </p> */@Configurationpublic class UserConfig { @Bean // 根據(jù) RuntimeExist的 matches 方法的返回值 是否裝配bean @Conditional(RuntimeExist.class) public User user(){ User user = new User(); user.setUserName('zszxz'); return user; }}

2.4 測試

由于 jvm 運(yùn)行時(shí)環(huán)境存在 java.runtime.name 屬性 ,故會(huì)裝配成功,會(huì)打印出 zszxz ;

如果將 java.runtime.name 改為 任意jvm 運(yùn)行時(shí)不存在的屬性 ,測試就會(huì)報(bào)異常;

@RunWith(SpringJUnit4ClassRunner.class)//創(chuàng)建spring應(yīng)用上下文@ContextConfiguration(classes= UserConfig.class)//加載配置類public class ConditionTest { @Autowired User user; @Test public void test(){ // zszxz System.out.println(user.getUserName()); }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 永昌县| 黑河市| 乌审旗| 平塘县| 囊谦县| 河源市| 长宁区| 广元市| 会东县| 昭苏县| 共和县| 花莲市| 江孜县| 梅河口市| 嘉兴市| 陇西县| 聊城市| 宁武县| 五华县| 望江县| 方山县| 雅安市| 宝应县| 克拉玛依市| 合阳县| 静宁县| 香河县| 蚌埠市| 建水县| 岢岚县| 赤水市| 宣城市| 娱乐| 财经| 那曲县| 沙坪坝区| 西丰县| 高平市| 尚志市| 廊坊市| 佛冈县|