前言
SpringBoot中提供了@Conditional注解,该注解的官方文档定义:“Indicates that a component is only eligible for registration when all specified conditions match”,意思是只有满足一些列条件之后创建一个bean。本篇,我们介绍一下其作用。
介绍
@Conditional定义
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Conditional {
Class<? extends Condition>[] value();
}
@Conditional注解主要用在以下位置:
- 类级别可以放在注标识有@Component(包含@Configuration)的类上
- 作为一个meta-annotation,组成自定义注解
- 方法级别可以放在标识由@Bean的方法上
SpringBoot的@Conditional系列
- ConditionalOnBean: 当且仅当指定的bean classes and/or bean names在当前容器中,才创建标记上该注解的类的实例
- ConditionalOnBean: 当且仅当指定的bean classes and/or bean names不存在当前容器中,才创建标记上该注解的类的实例,有指定忽略ignored的参数存在,可以忽略Class、Type等
- ConditionalOnClass:当且仅当ClassPath存在指定的Class时,才创建标记上该注解的类的实例
- ConditionalOnMissingClass:当且仅当ClassPath不存在指定的Class时,创建标记上该注解的类的实例
- ConditionalOnProperty:当且仅当Application.properties存在指定的配置项时,创建标记上了该注解的类的实例
- ConditionalOnJava:指定JDK的版本
- ConditionalOnExpression:表达式用${…}=false等来表示
- ConditionalOnJndi:JNDI存在该项时创建
- ConditionalOnResource:在classpath下存在指定的resource时创建
- ConditionalOnWebApplication:在web环境下创建
本文参考:https://www.jianshu.com/p/0740c07f6c1d
转载请注明出处