Spring4的@Conditional注解

@Conditional注解可以用于按条件创建Bean(目前遇到有该功能,有时间再看看有没有其他配置功能)
我们可以自定义自己的Condition:

public class KafkaCondition implements Condition {

//重写matches方法,该方法返回true表示启用该配置
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
    Environment env = conditionContext.getEnvironment();

    return env != null
        &&env.getProperty(MyConstants.MY_IMPL).equals(MyConstants.KAFKA_IMPL);
}
}

MyConstants类:

final class ConditionConstants {
static final String MY_IMPL = "service.impl";
static final String DB_IMPL = "database";
static final String KAFKA_IMPL = "kafka";
}

这样我们就可以在application.yml里控制条件了,当然你也可以在matches方法里按自己的想法定义条件。

application.yml里加入:
service:
    impl: kafka

经过以上操作,如果我们定义了一个类,就可以控制Spring容器初始化的时候会不会生成该Bean了

@Component
@Conditional(KafkaCondition.class)  //只有在service.impl的值是kafka的时候,Spring才会创建该Bean。
public class NgScheduledService {
  ... ...
}

你可能感兴趣的:(Spring4的@Conditional注解)