当前位置: 首页 > 编程笔记 >

Spring Boot conditional注解用法详解

萧卜霸
2023-03-14
本文向大家介绍Spring Boot conditional注解用法详解,包括了Spring Boot conditional注解用法详解的使用技巧和注意事项,需要的朋友参考一下

1、conditional注解介绍

含义: 基于条件的注解

作用: 根据是否满足某一个特定条件来决定是否创建某个特定的bean

意义: Springboot实现自动配置的关键基础能力

2、常见conditional注解

@ConditionalOnBean 框架中存在某个Bean时生效

@ConditionalOnMissingBean 在Bean不存在时生效

@ConditionalOnClass框架中存在某个Class时生效

@ConditionalOnMissingClass在Class不存在时生效

@ConditionalOnWebApplication 当前是web环境

@ConditionalOnNotWebApplication 当前不是web环境

@ConditionalOnProperty 当前框架中是否包含特定的属性

@ConditionalOnJava 当前是否存在某个Java版本

3、Conditional的使用

1) 创建A.java,增加注解ConditionalOnProperty,表示系统中有这个属性才实例化A

@Component
@ConditionalOnProperty("com.example.condition")
public class A {
}

2) 创建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
@Import(MyBeanImport.class)
public class ConditionTest implements ApplicationContextAware {
 
  private ApplicationContext applicationContext;
 
 
  @Test
  public void testA() {
    System.out.println(applicationContext.getBean(A.class));
  }
 
 
  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    this.applicationContext = applicationContext;
  }
}

3、运行测试类

抛出异常,表示没有找到A这个类。

然后在application.properties文件中增加属性

再次运行测试。成功。

4、A类中有个注解ConditionOnProperty

1) 进入注解ConditionOnProperty。里面有一个@Conditional注解

2) 进入@Conditional注解。里面的value是Class类型,并且继承自Condition接口

3) 进入Condition接口。里面只有一个方法。当这个方法返回true时,这个bean才会注入到容器当中。

5、自定义Conditional 注解

1) 创建MyCondition类。实现Condition接口重写matches方法,符合条件返回true

public class MyCondition implements Condition {
  @Override
  public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    String[] properties = (String[]) metadata
        .getAnnotationAttributes("com.example.demo.condi.MyConditionAnnotation")
        .get("value");
    for(String property : properties){
      if(StringUtils.isEmpty(context.getEnvironment().getProperty(property))){
        return false;
      }
    }
    return true;
  }
}

2) 创建注解MyConditionAnnotation ,并且引入Conditional注解,引入MyCondition类

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional({MyCondition.class})
public @interface MyConditionAnnotation {
  String[] value() default {};
}

3) 创建类AA使用注解MyConditionAnnotation

@Component
@MyConditionAnnotation({"com.example.condition1","com.example.condition2"})
public class AA {
}

4) 测试

a) 此时并没有com.example.condition1和com.example.condition2这两个属性值,所有测试失败

b) 然后增加这两个属性。

测试成功

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Java 注解的使用实例详解,包括了Java 注解的使用实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 注解的使用  注解的使用非常简单,只需在需要注解的地方标明某个注解即可,例如在方法上注解: 例如在类上注解: 所以Java内置的注解直接使用即可,但很多时候我们需要自己定义一些注解,例如常见的spring就用了大量的注解来管理对象之间的依赖关系。下面看看如何定义一个自己

  • 本文向大家介绍java javax.annotation.Resource注解的详解,包括了java javax.annotation.Resource注解的详解的使用技巧和注意事项,需要的朋友参考一下 java 注解:java javax.annotation.Resource  当我们在xml里面为类配置注入对象时,会发现xml文件会越来越臃肿,维护起来很麻烦。这时候我们可以使用注解这种机制来

  • 本文向大家介绍numpy.where() 用法详解,包括了numpy.where() 用法详解的使用技巧和注意事项,需要的朋友参考一下 numpy.where (condition[, x, y]) numpy.where() 有两种用法: 1. np.where(condition, x, y) 满足条件(condition),输出x,不满足输出y。 如果是一维数组,相当于[xv if c el

  • HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

  • 本文向大家介绍jQuery中on方法使用注意事项详解,包括了jQuery中on方法使用注意事项详解的使用技巧和注意事项,需要的朋友参考一下 on(eventType,[childSelector],[data],fn) 采用事件委托机制绑定事件,好处是子元素动态加入时无需再次绑定。 on方法可以传入childSelector指定添加事件处理函数的具体子元素,还可以传入对象格式的数据data,fn函

  • 本文向大家介绍详解Java编程中Annotation注解对象的使用方法,包括了详解Java编程中Annotation注解对象的使用方法的使用技巧和注意事项,需要的朋友参考一下 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。   1.基本语法 Java SE5内置三种标准注解 @Override:表示当前的方法定义将覆盖超类中的方