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存在指定的項
相關文章
相關標籤/搜索