Spring6 探析之@Conditional 注解

发布时间 2023-05-27 21:25:55作者: acdongla

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 接口

先写两个用于条件判断的类

image-20230527203236317

image-20230527203249932

然后再配置类中使用 @Conditional 注解

image-20230527203313340

可以看到,我将 @Conditional 注解作用在方法上,当满足条件时,才会创建对应的 bean 实例

测试一下:

这段代码用于输出 IOC 中的所有 bean name

image-20230527203355495

结果如图:

image-20230527203428988

因为我的操作系统是 Windows,所以id为 macBean 的实例没有被创建