Spring中的条件注解

Spring中提供了多种条件注解以实现在满足特定条件的时候才向Sping容器中注入指定的bean;Springboot中自动配置的原理也是基于各种条件注解,当我们引入某个依赖导致满足了注入某些特定bean的条件,这些bean就会被自动注入Spring容器中供我们使用。

  • @Conditional:该注解通常与@Configuration注解组合使用,当满足特定条件时才将该配置类中申明的bean注入Spring容器中。@Conditional注解接受一个Condition类型的参数,我们通常实现Condition接口重写其中的matches方法,在该方法中完成条件的判断。
public class Car1 {
    public void say(){
        System.out.println("i am car1");
    }
}
---
public class CustomCondition implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        return false;
    }
}
---
@Configuration
@Conditional(value = CustomCondition.class)
public class AutoConfig {
    @Bean
    Car1 car1(){
        return new Car1();
    }
}
---
public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AutoConfig.class);
        Car1 car1 = context.getBean(Car1.class);
        car1.say();
    }
}
---
	因为CustomCondition接口中的matches方法返回了false,所以AutoConfig中申明的所有bean都将不会注入Spring容器中,执行
main方法时会报bean找不到的异常。如果matches方法返回true,就可以看到正常执行的结果。
  • @ConditionalOnBean:当Spring容器中存在某个bean时该配置类中的Bean才会被注入Spring容器,但需要bean的注入顺序
  • @ConditionalOnMissingBean:与@ConditionalOnBean相反,仅当Spring容器中不存在指定bean时才注入当前bean;
  • @ConditionalOnClass:当当前类路径下存在某个类时才会注入;
  • @ConditionalOnProperty:该注解根据上下文环境配置中是否包含某个属性值,或者属性值是否为指定的值来决定是否注入;

你可能感兴趣的:(Spring中的条件注解)