最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring基于@Conditional條件化裝配bean

 更新時間:2020年04月20日 09:09:40   作者:知識追尋者  
這篇文章主要介紹了Spring @Conditional條件化裝配bean,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

一 前言

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

@Conditional 裝配bean

思路如下

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

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

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

實現(xiàn)過程如下

2.1 用戶類

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

/**
 * @Author lsc
 * <p> </p>
 */
public class User {

  private String userName;

	// 省略 set get
}

2.2 Condition實現(xiàn)類

RuntimeExist 實現(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)行時環(huán)境
    Environment environment = conditionContext.getEnvironment();
    // 檢查 jvm 運(yùn)行時環(huán)境是否存在屬性
    return environment.containsProperty("java.runtime.name");
  }
}

2.3 用戶配置類

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

/**
 * @Author lsc
 * <p> </p>
 */
@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 測試

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

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

@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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    這篇文章主要給大家介紹了關(guān)于Java請求調(diào)用參數(shù)格式為form-data類型的接口的相關(guān)資料,文中給出了詳細(xì)的代碼示例,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Java徹底消滅if-else的8種方案

    Java徹底消滅if-else的8種方案

    這篇文章主要給大家介紹了關(guān)于Java徹底消滅if-else的8種方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot2 集成測試組件的七種方法

    SpringBoot2 集成測試組件的七種方法

    下面圍繞幾個自己開發(fā)過程中常用的測試工具和手段,做簡單的總結(jié),不在于對比方式的好壞,存在即合理,在不同場景中對合理手段的選擇,快速解決問題才是根本目的。
    2021-06-06
  • Spring Cloud下OAUTH2注銷的實現(xiàn)示例

    Spring Cloud下OAUTH2注銷的實現(xiàn)示例

    本篇文章主要介紹了Spring Cloud下OAUTH2注銷的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • SpringBoot整合Activiti工作流框架的使用

    SpringBoot整合Activiti工作流框架的使用

    本文主要介紹了SpringBoot整合Activiti工作流框架的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java設(shè)計模式學(xué)習(xí)之工廠方法模式

    java設(shè)計模式學(xué)習(xí)之工廠方法模式

    這篇文章主要介紹了java設(shè)計模式學(xué)習(xí)之工廠方法模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • shiro之INI配置詳解

    shiro之INI配置詳解

    這篇文章主要為大家詳細(xì)介紹了shiro之INI配置的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • mybatis中的延遲加載類型及設(shè)定詳解

    mybatis中的延遲加載類型及設(shè)定詳解

    這篇文章主要介紹了mybatis中的延遲加載類型及設(shè)定詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進(jìn)行關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢,延遲加載可以有效的減少數(shù)據(jù)庫壓力,需要的朋友可以參考下
    2023-10-10
  • Spring?Data?JPA?映射VO/DTO對象方式

    Spring?Data?JPA?映射VO/DTO對象方式

    這篇文章主要介紹了Spring?Data?JPA?映射VO/DTO對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot?項目打成?jar后加載外部配置文件的操作方法

    SpringBoot?項目打成?jar后加載外部配置文件的操作方法

    這篇文章主要介紹了SpringBoot?項目打成?jar后加載外部配置文件的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論

滨州市| 锡林浩特市| 南召县| 西安市| 托克托县| 东兰县| 郧西县| 昌黎县| 积石山| 花垣县| 栾城县| 滨州市| 丹巴县| 阳泉市| 大悟县| 广元市| 曲周县| 徐水县| 洞头县| 黄山市| 马龙县| 花莲县| 陵水| 江阴市| 靖西县| 富平县| 新宾| 麻栗坡县| 伊金霍洛旗| 和田县| 五家渠市| 林口县| 固阳县| 甘泉县| 无棣县| 行唐县| 惠东县| 宁城县| 从江县| 合水县| 石门县|