springboot注解Conditional的用法

Condition 是在Spring中的的条件注解,通过这个注解可以根据条件,决定类是否加载到Spring Ioc容器中。

@Conditional的使用

注解实现:

public class AnnotationMethodLoader implements Condition {
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        Environment environment = conditionContext.getEnvironment();

        String modeName = environment.getProperty("modeName");
        MultiValueMap<String, Object> attributes = annotatedTypeMetadata.getAllAnnotationAttributes(Component.class.getName());
        if (attributes != null) {
            List<Object> value = attributes.get("value");
            if (Objects.equals(value.get(0), modeName)){
                return true;
            }
        }
        return false;
    }
}

使用:

@Conditional({AnnotationMethodLoader.class})
@Component(value = "mytestA")
@Slf4j
public class DylCreateMedalProcessor extends AbstractCreateMedalProcessor {
}
  • 以上便是个简单的根据不同的配置加载不同的类的例子。
  • 除去自己实现的Conditional外,Spring还帮我们添加好了一些常用的注解,具体注解如下:
Conditions 描述
@ConditionalOnBean 在存在某个bean的时候
@ConditionalOnMissingBean 不存在某个bean的时候
@ConditionalOnClass 当前classpath可以找到某个类型的类时
@ConditionalOnMissingClass 当前classpath不可以找到某个类型的类时
@ConditionalOnResource 当前classpath是否存在某个资源文件
@ConditionalOnProperty 当前jvm是否包含某个系统属性为某个值
@ConditionalOnWebApplication 当前spring context是否是web应用程序
posted @   faylinn  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
、、、
点击右上角即可分享
微信分享提示