欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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注解實(shí)現(xiàn)條件化是否裝配bean,這樣可以根據(jù)條件動態(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)行時環(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)文章

  • SpringBoot3使用?自定義注解+Jackson實(shí)現(xiàn)接口數(shù)據(jù)脫敏的步驟

    SpringBoot3使用?自定義注解+Jackson實(shí)現(xiàn)接口數(shù)據(jù)脫敏的步驟

    本文介紹了一種以優(yōu)雅的方式實(shí)現(xiàn)對接口返回的敏感數(shù)據(jù),如手機(jī)號、郵箱、身份證等信息的脫敏處理,這種方法也是企業(yè)常用方法,話不多說我們一起來看一下吧
    2024-03-03
  • SpringBoot之解決多個定時任務(wù)阻塞的問題

    SpringBoot之解決多個定時任務(wù)阻塞的問題

    這篇文章主要介紹了SpringBoot之解決多個定時任務(wù)阻塞的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java中如何使用HttpClient調(diào)用接口

    java中如何使用HttpClient調(diào)用接口

    這篇文章主要介紹了java中如何使用HttpClient調(diào)用接口,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java實(shí)現(xiàn)MD5加密的方式與實(shí)例代碼

    Java實(shí)現(xiàn)MD5加密的方式與實(shí)例代碼

    MD5加密是一種常見的加密方式,我們經(jīng)常用在保存用戶密碼和關(guān)鍵信息上。那么它到底有什么,又什么好處呢,會被這么廣泛的運(yùn)用在應(yīng)用開發(fā)中
    2021-10-10
  • 基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件

    基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)發(fā)送帶附件的郵件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • spring的13個經(jīng)典面試題

    spring的13個經(jīng)典面試題

    Spring框架是一個開放源代碼的J2EE應(yīng)用程序框架,是針對bean的生命周期進(jìn)行管理的輕量級容Spring解決了開發(fā)者在J2EE開發(fā)中遇到的許多常見的問題,我們這篇文章就來了解一下spring的面試題
    2021-06-06
  • idea插件篇之java內(nèi)存分析工具(JProfiler)的使用

    idea插件篇之java內(nèi)存分析工具(JProfiler)的使用

    這篇文章主要介紹了idea插件篇之java內(nèi)存分析工具(JProfiler),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 基于JDBC訪問MySql公共方法實(shí)例解析

    基于JDBC訪問MySql公共方法實(shí)例解析

    這篇文章主要介紹了基于JDBC訪問MySql公共方法實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 通俗講解JVM的類加載機(jī)制

    通俗講解JVM的類加載機(jī)制

    這篇文章主要介紹了JVM的類加載機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • 創(chuàng)建動態(tài)代理對象bean,并動態(tài)注入到spring容器中的操作

    創(chuàng)建動態(tài)代理對象bean,并動態(tài)注入到spring容器中的操作

    這篇文章主要介紹了創(chuàng)建動態(tài)代理對象bean,并動態(tài)注入到spring容器中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論