springboot注解Conditional的用法

Condition 是在Spring中的的条件注解,通过这个注解可以根据条件,决定类是否加载到Spring Ioc容器中。

@Conditional的使用

注解实现:

public class AnnotationMethodLoader implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        Environment environment = conditionContext.getEnvironment();

        String modeName = environment.getProperty("modeName");
        MultiValueMap<String, Object> attributes = annotatedTypeMetadata.getAllAnnotationAttributes(Component.class.getName());
        if (attributes != null) {
            List<Object> value = attributes.get("value");
            if (Objects.equals(value.get(0), modeName)){
                return true;
            }
        }
        return false;
    }
}

使用:

@Conditional({AnnotationMethodLoader.class})
@Component(value = "mytestA")
@Slf4j
public class DylCreateMedalProcessor extends AbstractCreateMedalProcessor {
}
  • 以上便是个简单的根据不同的配置加载不同的类的例子。
  • 除去自己实现的Conditional外,Spring还帮我们添加好了一些常用的注解,具体注解如下:
Conditions 描述
@ConditionalOnBean 在存在某个bean的时候
@ConditionalOnMissingBean 不存在某个bean的时候
@ConditionalOnClass 当前classpath可以找到某个类型的类时
@ConditionalOnMissingClass 当前classpath不可以找到某个类型的类时
@ConditionalOnResource 当前classpath是否存在某个资源文件
@ConditionalOnProperty 当前jvm是否包含某个系统属性为某个值
@ConditionalOnWebApplication 当前spring context是否是web应用程序
posted @ 2020-06-03 14:26  faylinn  阅读(258)  评论(0编辑  收藏  举报
、、、