一、@Conditional,用于控制 Spring 容器是否注册某个组件

这意味着 @Conditional 注解在运行时仍然可用,可以被框架或其他工具在运行时检查Class<? extends Condition>[] value();
@Target:元注解,用于指定自定义注解可以应用的目标元素类型。ElementType.TYPE:表示该注解可以应用于类、接口、枚举或注解类型。ElementType.METHOD:表示该注解可以应用于方法@Retention:元注解,用于指定自定义注解的保留策略。RetentionPolicy.RUNTIME:表示该注解会被保留到运行时,并且可以通过反射访问。value:自定义注解的成员变量,用于指定一组Condition的子类。Class<? extends Condition>[]:表示成员变量的类型是一个Condition类型的数组。这里Condition是 Spring 框架中的接口,用于定义条件检查逻辑。[]:表示成员变量是一个数组,可以包含多个Condition子类的引用。
二、自定义的判断类必须实现condition接口
Condition 接口允许您定义自定义的条件来控制 Bean 的注册。通过实现 Condition 接口,您可以编写逻辑来决定在特定条件下是否应该注册某个 Bean。

在这个例子中,MyPropertyCondition 类实现了 Condition 接口,并在 matches 方法中检查环境变量 my.property 是否存在。如果存在,则返回 true,表示条件满足。
使用例图:(如果满足WindowsCondition)

三、内置condition类:

1. OnClassCondition
检查类路径是否存在某个类。
2. OnBeanCondition
检查容器中是否存在某个类型的 Bean。
3. OnPropertyCondition
检查系统属性或环境变量是否存在。
4. OnClassCondition
检查类路径中是否存在某个类。
5. OnJavaCondition
检查当前运行的 Java 版本。
6. OnWebApplicationCondition
检查是否运行在 Web 环境下。
7. OnClasspathResourceCondition
检查类路径中是否存在某个资源。

四、@ConditionalOnMission的判定bug


被折叠的 条评论
为什么被折叠?



