引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档
@Conditional表示仅当所有指定条件都匹配时,组件才有资格注册 。
该@Conditional注释可以在以下任一方式使用:
改注解主要源码之一,通过match匹配,符合条件才装载到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指定的条件成立,才给容器添加组件
@Conditional派生注解:@Conditional派生了很多注解,下面给个表格列举一下派生注解的用法
@Conditional派生注解 | 作用(都是判断是否符合指定的条件) | @H_502_26@@ConditionalOnJava | 系统的java版本是否符合要求 | @H_502_26@@ConditionalOnBean | 有指定的Bean类 | @H_502_26@@ConditionalOnMissingBean | 没有指定的bean类 | @H_502_26@@ConditionalOnExpression | 符合指定的SpEL表达式 | @H_502_26@@ConditionalOnClass | 有指定的类 | @H_502_26@@ConditionalOnMissingClass | 没有指定的类 | @H_502_26@@ConditionalOnSingleCandidate | 容器只有一个指定的bean,或者这个bean是首选bean | @H_502_26@@ConditionalOnProperty | 指定的property属性有指定的值 | @H_502_26@@ConditionalOnResource | 路径下存在指定的资源 | @H_502_26@@ConditionalOnWebApplication | 系统环境是web环境 | @H_502_26@@ConditionalOnNotWebApplication | 系统环境不是web环境 | @H_502_26@@ConditionalOnjndi | JNDI存在指定的项 |
---|
总结