@Conditional相关注解
看接口是否能调用或者初始化方法判断类有没有实例化package com.example.demo.condition; import com.example.demo.DemoApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Conditional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; /** * * ConditionalOnProperty 的作用是 当指定的配置属性满足条件时 加载被标注的 Bean否则不加载该 Bean。它通常用于根据外部配置动态控制功能的启用或禁用。 * 如果配置文件中 marketing.direct.push.pressureTestingSwitchtrue 则会加载 PushPressureApiTest Bean。 * 如果配置文件中 marketing.direct.push.pressureTestingSwitchfalse 则不会加载 PushPressureApiTest Bean。 * 如果配置文件中未定义 marketing.direct.push.pressureTestingSwitch 由于 matchIfMissingtrue也会加载 PushPressureApiTest Bean * 如果没有matchIfMissingtrue则不会加载。 * * ConditionalOnExpression 的作用是 当指定的 SpEL 表达式计算结果为 true 时 加载被标注的 Bean否则不加载该 Bean。 * 它提供了一种灵活的方式根据运行时的条件动态地控制 Bean 的创建。 * * ConditionalOnMissingBean 的作用是 仅当指定类型的 Bean 不存在于 Spring 容器中时 才会加载被标注的 Bean。 * 它通常用于提供默认的 Bean 定义同时允许用户通过自定义配置覆盖默认的实现。 * * ConditionalOnBean 的作用是 仅当指定类型的 Bean 存在于 Spring 容器中时 才会加载被标注的 Bean。 * 它通常用于依赖某些 Bean 的存在来决定是否加载其他 Bean。 * * Conditional 的作用是 当指定的条件满足时加载被标注的 Bean 否则不加载该 Bean。 * 它是 Spring 的条件化配置的核心注解通常与自定义的条件类配合使用。 * */ RestController RequestMapping(/api/open/v1/test) //ConditionalOnProperty(name marketing.direct.push.pressureTestingSwitch, havingValue true, matchIfMissing true) //ConditionalOnExpression(${marketing.direct.push.pressureTestingSwitch:true}) //ConditionalOnBean(ConditionDemo.class) //ConditionalOnMissingBean(ConditionDemo.class) Conditional(MyCondition.class) public class PushPressureApiTest { PostConstruct public void init() { System.out.println(PushPressureApiTest类实例化了); } PostMapping(/push/sendMessage) public String pressure() { return hello; } }package com.example.demo.condition; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; public class MyCondition implements Condition { Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return false; } }package com.example.demo.condition; import org.springframework.stereotype.Component; Component public class ConditionDemo { }