java / 正文

springboot @ConditionalOnProperty ( 条件装配注解 ) 详解

2026-05-15 14:30 2 浏览
评论(0
字体大小:

@ConditionalOnProperty 详解

@ConditionalOnPropertySpring Boot 提供的条件装配注解,核心作用是:
根据配置文件(application.yml/application.properties)中的属性值,决定是否创建/加载某个 Bean
简单说:配置满足,就创建 Bean;配置不满足,就忽略这个 Bean

一、核心用途

  1. 功能开关:通过配置项开启/关闭某个功能
  2. 环境区分:开发/测试/生产环境使用不同的 Bean
  3. 模块化控制:按需加载组件,减少不必要的Bean创建

二、常用属性

属性
作用
prefix
配置项的前缀(简化写法)
name
配置项的名称
havingValue
期望配置项的值(匹配才生效)
matchIfMissing
配置文件中没有该属性时,是否默认生效(默认false)

三、代码示例(最常用场景)

1. 配置文件(application.yml)

# 自定义开关配置
my:
  feature:
    enabled: true  # 开启
    # enabled: false  # 关闭

2. Java 代码使用

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

/**
 * 只有配置文件中 my.feature.enabled=true 时,这个Bean才会被创建
 */
@Component
@ConditionalOnProperty(
    prefix = "my.feature",  // 前缀
    name = "enabled",       // 属性名
    havingValue = "true",   // 期望的值
    matchIfMissing = false // 没配置这个属性时,不加载
)
public class MyFeatureService {
    // 业务逻辑
}

 


四、进阶用法

1. 配置不存在时默认生效

matchIfMissing = true就算配置文件没写这个属性,也加载Bean
@ConditionalOnProperty(
    prefix = "my.feature",
    name = "enabled",
    havingValue = "true",
    matchIfMissing = true  // 关键:无配置时默认生效
)

2. 简写方式(直接写完整配置名)

@ConditionalOnProperty("my.feature.enabled")

3. 用在配置类上

控制整个配置类的生效:
@Configuration
@ConditionalOnProperty(name = "app.mq.enabled", havingValue = "true")
public class MqConfig {
    // 只有配置开启,才会加载里面的所有Bean
}

五、和 @Conditional 的关系

  • @ConditionalOnPropertySpring Boot 扩展
  • 底层基于 Spring 原生的 @Conditional 实现
  • 专门用于基于配置文件的条件判断,比原生注解更简单

总结

  1. 作用:根据配置文件的值,控制 Bean 是否创建
  2. 场景:功能开关、环境切换、按需加载
  3. 核心:配置匹配 → 加载Bean;不匹配 → 不加载
  4. 关键参数prefix/name(配置名)、havingValue(期望值)、matchIfMissing(无配置时默认行为)

本文发布于程序达人 ,转载请注明出处,谢谢合作

0 人认为有用
0 评论

相关热点文章推荐

程序达人 - chengxudaren.com

一个帮助开发者成长的社区

相关文章