真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Spring基于@Conditional條件化裝配bean的方法

這篇文章主要講解了Spring基于@Conditional條件化裝配bean的方法,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。

目前創(chuàng)新互聯(lián)公司已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、沈陽(yáng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

一 前言

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

@Conditional 裝配bean

思路如下

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

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

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

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

2.1 用戶(hù)類(lèi)

用戶(hù)類(lèi)用于配置類(lèi)是否裝配該Bean

/**
 * @Author lsc
 * 

*/ public class User { private String userName; // 省略 set get }

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

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加載的類(lèi)。
     
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 用戶(hù)配置類(lèi)

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

/**
 * @Author lsc
 * 

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

2.4 測(cè)試

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

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

@RunWith(SpringJUnit4ClassRunner.class)//創(chuàng)建spring應(yīng)用上下文
@ContextConfiguration(classes= UserConfig.class)//加載配置類(lèi)
public class ConditionTest {

  @Autowired
  User user;

  @Test
  public void test(){
    // zszxz
    System.out.println(user.getUserName());
  }
}

看完上述內(nèi)容,是不是對(duì)Spring基于@Conditional條件化裝配bean的方法有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)頁(yè)標(biāo)題:Spring基于@Conditional條件化裝配bean的方法
標(biāo)題URL:http://weahome.cn/article/jpjdgp.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部