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应用程序 |
时在中春,阳和方起