springboot条件注解总结

目录

@Conditional

@ConditionalOnBean

@ConditionalOnMissingBean

@ConditionalOnClass

@ConditionalOnMissingClass

@ConditionalOnWebApplication

@ConditionalOnNotWebApplication

@ConditionalOnProperty

@ConditionalOnExpression

 @ConditionalOnJava

@ConditionalOnResource

@ConditionalOnJndi

@ConditionalOnCloudPlatform

@ConditionalOnSingleCandidate


@Conditional

这是 Spring 4.0 添加的新注解,用来标识一个Spring Bean 或者 Configuration 配置文件,当满足指定的条件才开启配置。

@ConditionalOnBean

组合@conditiona1 注解,当容器中有指定的Bean 才开启配置

@ConditionalOnMissingBean

组合@Conditional 注解,和 @ConditionalonBean注解相反,当容器中没有指定的 Bean 才开启配置。

@ConditionalOnClass

组合@conditional 注解,当容器中有指定的Class 才开启配置。

@ConditionalOnMissingClass

组合@Conditional 注解,和注解相反,当容器中没有指@ConditionalOnClass定的 Class 才开启配置

@ConditionalOnWebApplication

组合@conditional 注解,当前项目类型是 WEB组合项目才开启配置。

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({OnWebApplicationCondition.class})
public @interface ConditionalOnWebApplication {
    ConditionalOnWebApplication.Type type() default ConditionalOnWebApplication.Type.ANY;

    public static enum Type {
        ANY,
        SERVLET,
        REACTIVE;

        private Type() {
        }
    }
}

@ConditionalOnNotWebApplication

组合@Conditional 注解,和@ConditionalOnWebApplication注解相反,当前项目类型不是 WEB 项目才开启配置

@ConditionalOnProperty

组合@conditional注解,当指定的属性有指定的值时才开启配置。

@ConditionalOnExpression

组合@conditional 注解,当 SpEL 表达式为 true时才开启配置。

SpEL支持的字面量包括:字符串、数字类型(int、long、float、double)、布尔类型、null类型。 支持 Java 标准操作符:等于、不等于、小于、小等于、大于、大等于、正则表达式和 instanceof 操作符。

//解析器
ExpressionParser parser
        = new SpelExpressionParser();

//数值比较
boolean result=parser.parseExpression("2>1").getValue(Boolean.class);
System.out.println("2>1:"+result);

//字符串比较
result=parser.parseExpression("'z'>'a'").getValue(Boolean.class);
System.out.println("'z'>'a':"+result);

//instanceof 运算符
result=parser.parseExpression("'str' instanceof T(String)").getValue(Boolean.class);
System.out.println("'str' 是否为字符串 :"+result);

result=parser.parseExpression("1 instanceof T(Integer)").getValue(Boolean.class);
System.out.println("1 是否为整型 :"+result);

//正则表达式
result=parser.parseExpression("22 matches '\\d{2}'").getValue(Boolean.class);
System.out.println("22 是否为两位数字 :"+result);

 @ConditionalOnJava

组合 @conditional 注解,当运行的 Java JVM 在指定的版本范围时才开启配置。

@ConditionalOnResource

组合 @conditional 注解,当类路径下有指定的资源才开启配置。

@ConditionalOnJndi

组合 @conditional 注解,当指定的JNDI 存在时才开启配置。

@ConditionalOnCloudPlatform

组合 @conditional 注解,当指定的云平台激活时才开启配置。

@ConditionalOnSingleCandidate

组合@Conditional注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才

开启配置。

你可能感兴趣的:(spring,boot,java,spring)