springboot-@Conditional注解使用
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
try {
context.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");
return true;
} catch (Exception e) {
return false;
}
}
}
当你用Java来声明Bean的时候,可以使用这个自定义条件类: @Conditional(JdbcTemplateCondition.class) public MyService myService() { … } 此时,只有当JdbcTemplateCondition类的条件成立时才会创建MyService这个 Bean。也就是说MyService Bean创建的条件是Classpath里有JdbcTemplate。否则,这个Bean的声明就会被忽略掉。
自动配置中使用的条件化注解 =============================================================================================================== 条件化注解 配置生效条件 =============================================================================================================== @ConditionalOnBean 配置了某个特定Bean @ConditionalOnMissingBean 没有配置特定的Bean @ConditionalOnClass Classpath里有指定的类 @ConditionalOnMissingClass Classpath里缺少指定的类 @ConditionalOnExpression 给定的Spring Expression Language(SpEL)表达式计算结果为true @ConditionalOnJava Java的版本匹配特定值或者一个范围值 @ConditionalOnJndi 参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI InitialContext @ConditionalOnProperty 指定的配置属性要有一个明确的值 @ConditionalOnResource Classpath里有指定的资源 @ConditionalOnWebApplication 这是一个Web应用程序 @ConditionalOnNotWebApplication 这不是一个Web应用程序 ===============================================================================================================
