当前位置: 首页 > news >正文

学习springboot-条件化配置@Conditional(条件注解)

前言

在Spring Boot中,@Conditional 注解及其相关注解是用于条件化配置的重要工具。它们允许开发者根据特定条件决定是否加载某个Bean或配置类。

注意:@Conditional 相关注解,通常和@Bean搭配使用

学习springboot-Bean管理(Bean 注册,Bean 扫描)_springboot 类扫描 工具-CSDN博客

学习springboot 的自动配置原理-CSDN博客


以下是一些与@Conditional相关的核心注解及其说明:

1. @Conditional(条件注解)

作用:这是一个基础注解,用于定义条件化的Bean加载。它需要配合具体的条件类使用。
使用场景通常不单独使用,而是通过扩展Condition接口来实现具体的条件逻辑。

实例

@Bean
@Conditional(MyCondition.class)
public MyBean myBean() {return new MyBean();
}

2 .@ConditionalOnClass(基于类存在条件)

作用:只有当指定的类在类路径中存在时,才加载该Bean或配置类。
使用场景:常用于依赖某些库的场景,例如只有当某个框架的类存在时才启用相关功能。

实例

@Configuration
@ConditionalOnClass(MyDependencyClass.class)
public class MyConfiguration {@Beanpublic MyBean myBean() {return new MyBean();}
}

3.@ConditionalOnMissingClass(基于类缺失条件)

作用:只有当指定的类在类路径中不存在时,才加载该Bean或配置类。
使用场景:用于在某些依赖不存在时启用备用逻辑。

实例

@Configuration
@ConditionalOnMissingClass("com.example.MyDependencyClass")
public class MyFallbackConfiguration {@Beanpublic MyFallbackBean myFallbackBean() {return new MyFallbackBean();}
}

4.@ConditionalOnBean(基于Bean存在条件)

作用:只有当指定的Bean在Spring容器中存在时,才加载该Bean或配置类。
使用场景:用于依赖其他Bean的场景,确保某些功能只有在相关组件存在时才启用。

实例

@Configuration
@ConditionalOnBean(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}

 5.@ConditionalOnMissingBean(基于Bean缺失条件)

作用:只有当指定的Bean在Spring容器中不存在时,才加载该Bean或配置类。
使用场景:用于提供默认实现,但允许用户通过自定义Bean覆盖默认行为。

实例

@Configuration
@ConditionalOnMissingBean(MyService.class)
public class DefaultMyServiceConfiguration {@Beanpublic MyService myService() {return new DefaultMyService();}
}

6.@ConditionalOnProperty(基于属性条件)

作用:根据配置文件中的属性值决定是否加载该Bean或配置类。
使用场景:用于根据配置动态启用或禁用某些功能。

实例

@Configuration
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")
public class MyFeatureConfiguration {@Beanpublic MyFeatureBean myFeatureBean() {return new MyFeatureBean();}
}

7.@ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication

作用:
@ConditionalOnWebApplication:仅在Web应用上下文中加载。
@ConditionalOnNotWebApplication:仅在非Web应用上下文中加载。
使用场景:用于区分Web应用和非Web应用的配置。

实例

@Configuration
@ConditionalOnWebApplication
public class WebSpecificConfiguration {@Beanpublic WebSpecificBean webSpecificBean() {return new WebSpecificBean();}
}

8.@ConditionalOnSingleCandidate(基于单一候选Bean条件)

作用:只有当指定的Bean在Spring容器中是唯一的候选Bean时,才加载该Bean或配置类。
使用场景:用于确保某个Bean的唯一性,避免冲突。

实例

@Configuration
@ConditionalOnSingleCandidate(MyService.class)
public class MyServiceConfiguration {@Beanpublic MyServiceClient myServiceClient(MyService myService) {return new MyServiceClient(myService);}
}

相关文章:

  • 数字智慧方案5872丨智慧交通解决方案(54页PPT)(文末有下载方式)
  • AI大模型-RAG到底能做些什么?
  • 镜像和容器的深度介绍和关系
  • 使用xlwings计算合并单元格的求和
  • 改进算法超详细:双变异樽海鞘群算法:从最优性能设计到分析
  • MySQL数据库上篇
  • 怎么实现动态提示词,并提升准确率
  • 【IPMV】图像处理与机器视觉:Lec9 Laplace Blending 拉普拉斯混合
  • 这款软件的第三方评测:功能、易用性与性能表现如何?
  • map和set的遗留 + AVL树(1):
  • K8S - StatefulSet 与 DaemonSet - 有状态应用部署与节点管理策略
  • [面试]SoC验证工程师面试常见问题(二)
  • PyTorch_创建张量
  • 浅谈SpringBoot框架中的单例bean
  • 【KWDB 创作者计划】利用KWDB解决工业物联网场景中的海量数据管理难题的思考
  • 代码随想录单调栈part2
  • C 语言 第五章 指针(6)
  • 网工_IP协议
  • 【算法基础】冒泡排序算法 - JAVA
  • 【质量管理】现代TRIZ问题识别中的功能分析——组件分析
  • 郭少雄导演逝世,享年82岁
  • 国家能源局:鼓励各地探索深远海、沙戈荒等可再生能源制氢场景
  • 金融监管总局修订发布《行政处罚办法》,7月1日起施行
  • 投资者建议发行优惠套票给“被套”小股东,张家界:将研究考虑
  • 莫名的硝烟|“我们最好记住1931年9月18日这个日子”
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁