SpringBoot 条件注解的作用
- 修饰在自动配置类上:作用是判断自动配置类是否生效
- 修饰在某个@Bean修饰的方法上:作用是判断Bean是否需要生成
SpringBoot 条件注解有哪些
- @ConditionalOnBean:是否存在某个类型的Bean或某个名字的Bean
- @ConditionalOnMissingBean:是否缺失某个类型的Bean或某个名字的Bean
- @ConditionalOnSingleCandidate:某个类型的Bean是否只有一个
- @ConditionalOnClass:是否存在某个类
- @ConditionalOnMissingClasss:是否缺失某个类
- @ConditionalOnExpression:是否符合指定的表达式
- @ConditionalOnJava:是否是Java的某个版本
- @ConditionalOnWebApplication:当前应用是一个Web应用?
- @ConditionalOnNotWebApplication:当前应用不是一个Web应用?
- @ConditionalOnJndi:JNDI指定的资源是否存在
- @ConditionalOnProperty:Environment中是否存在某个属性
- @ConditionalOnResource:是否存在某个资源
- @ConditionalOnWarDeployment:当前应用是不是以War包部署的方式运行
-
@ConditionalOnCloudPlatform:是否在某个云平台上
自定义条件注解
我们也可能通过Spring中@Conditional注解自定义条件注解,如下
//表示条件通过时创建orderService Bean,否则不创建。
@Conditional(OnClassCondition.class)//指定条件实现类
@Bean
public OrderServce orderServce() {
return new OrderService();
}
//条件类实现Condition接口matches方法,返回true表示条件通过,返回false表示条件不通过
public class OnClassCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return false;
}
}