SpringBoot系列之@Conditional注解用法简介

SpringBoot系列之@Conditional注解用法简介html

引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档java

@Conditional表示仅当全部指定条件都匹配时,组件才有资格注册 。
该@Conditional注释能够在如下任一方式使用:web

  • 做为任何@Bean方法的方法级注释
  • 做为任何类的直接或间接注释的类型级别注释 @Component,包括@Configuration类
  • 做为元注释,目的是组成自定义构造型注释

改注解主要源码之一,经过match匹配,符合条件才装载到Spring容器spring

@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    if (context.getEnvironment() != null) {
        // Read the @Profile annotation attributes
        MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
        if (attrs != null) {
            for (Object value : attrs.get("value")) {
                if (context.getEnvironment().acceptsProfiles(((String[]) value))) {
                    return true;
                }
            }
            return false;
        }
    }
    return true;
}

做用:总而言之,只有@Conditional指定的条件成立,才给容器添加组件api

@Conditional派生注解:@Conditional派生了不少注解,下面给个表格列举一下派生注解的用法ide

@Conditional派生注解 做用(都是判断是否符合指定的条件)
@ConditionalOnJava 系统的java版本是否符合要求
@ConditionalOnBean 有指定的Bean类
@ConditionalOnMissingBean 没有指定的bean类
@ConditionalOnExpression 符合指定的SpEL表达式
@ConditionalOnClass 有指定的类
@ConditionalOnMissingClass 没有指定的类
@ConditionalOnSingleCandidate 容器只有一个指定的bean,或者这个bean是首选bean
@ConditionalOnProperty 指定的property属性有指定的值
@ConditionalOnResource 路径下存在指定的资源
@ConditionalOnWebApplication 系统环境是web环境
@ConditionalOnNotWebApplication 系统环境不是web环境
@ConditionalOnjndi JNDI存在指定的项
相关文章
相关标签/搜索