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

@Profile, @Conditional, @ConditionalOnMissingBean, @ConditionalOnClass

[Q&A] @Profile 引入背景
随着 Spring 应用在不同环境(开发、测试、生产)中部署的需求增加,配置文件的切换变得频繁。原有的方式需要手动修改配置或使用多个配置文件,维护成本高。@Profile 的出现使得开发者可以基于当前激活的 profile(如 dev、test、prod)来决定是否加载某个 Bean 或配置类。

[Q&A] @Conditional 引入背景
@Profile 虽然解决了环境差异问题,但无法满足更复杂的条件判断需求。@Conditional 提供了一个通用的条件化注册机制,允许开发者通过实现 Condition 接口自定义条件逻辑。

[Q&A] @ConditionalOnMissingBean 引入背景
Spring Boot 推出了自动配置机制,旨在减少用户手动配置。在自动装配过程中,为了避免重复创建相同类型的 Bean,引入了该注解,允许在容器中没有指定 Bean 时才进行自动创建。

[Q&A] @ConditionalOnClass 引入背景
Spring Boot 的自动配置模块中,很多配置依赖于第三方库的存在(如 Tomcat、Jackson、JPA 等)。如果项目中未引入这些依赖,自动配置类可能会因找不到类而报错。@ConditionalOnClass 的引入提供了一种优雅的方式,在类路径存在指定类时才加载相关配置,避免启动失败。

注解名称所属模块引入版本作用维度典型用途
@ProfileSpring FrameworkSpring 3.1 (2011)环境配置根据环境加载不同配置,开发 / 测试 / 生产环境切换数据源
@ConditionalSpring FrameworkSpring 4.0 (2013)自定义条件动态控制 Bean 加载
@ConditionalOnMissingBeanSpring BootSpring Boot 1.0 (2014)容器状态是否存在同类型 Bean,防止重复注册默认 Bean
@ConditionalOnClassSpring BootSpring Boot 1.0 (2014)类路径检查类路径是否存在指定类,判断依赖是否存在以决定是否启用配置
注解名称所属模块引入版本是否推荐使用是否淘汰及替代建议
@ConditionalOnExpressionspring-context-support / spring-boot-autoconfigureSpring 3.1 (2011) / Boot 1.0✔️ 是(灵活但复杂)❌ 否
@Conditionalspring-contextSpring 4.0 (2013)✔️ 是❌ 否
@ConditionalOnMissingBeanspring-boot-autoconfigureSpring Boot 1.0 (2014)✔️ 是❌ 否
@ConditionalOnClassspring-boot-autoconfigureSpring Boot 1.0 (2014)✔️ 是❌ 否
@ConditionalOnBeanspring-boot-autoconfigureSpring Boot 1.0 (2014)✔️ 是❌ 否
@ConditionalOnPropertyspring-boot-autoconfigureSpring Boot 1.0 (2014)✔️ 是❌ 否
@ConditionalOnResourcespring-boot-autoconfigureSpring Boot 1.0 (2014)⚠️ 不常用⚠️ 推荐替代: @ConditionalOnResourceCondition

典型用法

Spring @Conditional, @ConditionalOnMissingBean, @ConditionalOnClass 等 典型用法
Spring @Profile 典型用法

http://www.xdnf.cn/news/1018189.html

相关文章:

  • nodejs 语言特性(面试系列2)
  • 【Pandas】pandas DataFrame droplevel
  • java中跨域问题及解决方案
  • Spring XML 常用命名空间配置
  • React Native 项目实战 —— 记账本应用开发指南
  • 【React Native 性能优化:虚拟列表嵌套 ScrollView 问题全解析】
  • Java-数组-异常(基础)
  • 包含40个购物网站UI界面的psd适用于电商项目
  • 在 Linux 系统中通过 yum 安装 Sublime Text
  • 平压印刷机设计原理与关键技术研究
  • 网络安全防护:点击劫持
  • Linux 系统设置时区
  • Token 的流动性:为什么它是项目的关键?
  • 传染病传播模拟:基于社会接触网络的疫情预测模型
  • 【设计模式】UML图与工厂模式
  • 德信软件,512天,我的创作纪念日
  • RocketMQ总结
  • Rimini Street宣布将SAP ECC和S/4HANA支持延长至2040年,为企业提供替代路径
  • 基于大模型预测过敏性紫癜的技术方案大纲
  • Rust 学习笔记2025.6.13
  • Excel词典(xllex.dll)文件丢失或损坏导致功能异常?别慌!专业修复策略来了!
  • 排序--计数排序
  • Active Directory Certificate Services(AD CS)攻击基础
  • Java单例模式有几种实现方式
  • 为什么py文件打包后大小会增加很多?
  • 亚马逊云 Lambda 容器化部署教程
  • Rust 学习笔记:关于处理任意数量的 future 的练习题
  • Redis 使用场景、缓存什么数据?怎么保证数据一致性?
  • 自定义线程池 4.0
  • 基于51单片机的简易售货机系统