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:表示当前的方法定义将覆盖超类中的方