Spring6 探析之@Conditional 注解
Spring6 探析之@Conditional 注解
介绍
我们写业务逻辑时,会用到 if-else 条件,@Conditional 注解可以通过条件判断是否要将 Bean 注入到 IOC 容器中,它可以标记在类和方法上,我们先看一下源码吧
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
/**
* All {@link Condition} classes that must {@linkplain Condition#matches match}
* in order for the component to be registered.
*/
Class<? extends Condition>[] value();
}
value 参数:是一个字节码数组,我们在自定义的类中编写条件,然后传入进value参数
演示
@Conditional 可以作用在类和方法上,也可以同时作用在类和方法上,这里我只演示作用在方法上的例子,请大家举一反三
参数 value 传入的类有一定的限制:必须是实现了 Condition 接口
先写两个用于条件判断的类
然后再配置类中使用 @Conditional 注解
可以看到,我将 @Conditional 注解作用在方法上,当满足条件时,才会创建对应的 bean 实例
测试一下:
这段代码用于输出 IOC 中的所有 bean name
结果如图:
因为我的操作系统是 Windows,所以id为 macBean 的实例没有被创建