1. 程式人生 > 程式設計 >Spring @Conditional註解原理解析

Spring @Conditional註解原理解析

這篇文章主要介紹了Spring @Conditional註解原理解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

@Conditional是Spring4新提供的註解,它的作用是根據某個條件載入特定的bean。

我們需要建立實現類來實現Condition介面,這是Condition的原始碼

public interface Condition {
  boolean matches(ConditionContext var1,AnnotatedTypeMetadata var2);
}

所以我們需要重寫matches方法,該方法返回boolean型別。

首先我們準備根據不同的作業系統環境進行對容器載入不同的bean,先建立Person

public class Person {
}

建立實現類LinuxCondition和WindowCondiction,

LinuxCondition:

public class WindowCondiction implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext,AnnotatedTypeMetadata annotatedTypeMetadata) {
   return true;
  }
}

WindowCondiction:

public class LinuxCondition implements Condition {
  @Override
  public boolean matches(ConditionContext conditionContext,AnnotatedTypeMetadata annotatedTypeMetadata) {

    return true;
  }
}

配置類:給相應的bean加上 @Conditional註解,裡面的括號將返回boolean型別,返回true則載入bean

@Configuration
public class MainConfig {

  @Profile("window")
  @Conditional(WindowCondiction.class)
  @Bean
  public Person person01(){
    return new Person("李思",30);
  }

  @Profile("linux")
  @Conditional(LinuxCondition.class)
  @Bean
  public Person person02(){
    return new Person("wangwu",35);
  }
}

測試:現在是按照linux環境,@Profile註解先匹配linux的bean,再根據@Conditional 返回的型別判斷是否載入bean,這裡都設定返回true,所以應該列印

Person{name='wangwu',age=35}

public class CondictionTest {

  @Test
  public void test(){
    //建立容器
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
    //設定需要啟用的環境
    applicationContext.getEnvironment().setActiveProfiles("linux");
    //設定主配置類
    applicationContext.register(MainProfileConfig.class);
    //啟動重新整理容器
    applicationContext.refresh();

    String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
    for (String name : beanNamesForType){
      System.out.println(name);
    }
    applicationContext.close();
  }
}

如果把LinuxCondition的返回值該為false,會報找不到bean的異常

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.springbean.Person' available

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。