java /
正文
springboot @ConditionalOnProperty ( 条件装配注解 ) 详解
2026-05-15 14:30
2 浏览
评论(0)
字体大小:
@ConditionalOnProperty 详解
@ConditionalOnProperty 是 Spring Boot 提供的条件装配注解,核心作用是:根据配置文件(application.yml/application.properties)中的属性值,决定是否创建/加载某个 Bean。
简单说:配置满足,就创建 Bean;配置不满足,就忽略这个 Bean。
一、核心用途
-
功能开关:通过配置项开启/关闭某个功能
-
环境区分:开发/测试/生产环境使用不同的 Bean
-
模块化控制:按需加载组件,减少不必要的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 的关系
-
@ConditionalOnProperty是 Spring Boot 扩展 -
底层基于 Spring 原生的
@Conditional实现 -
专门用于基于配置文件的条件判断,比原生注解更简单
总结
-
作用:根据配置文件的值,控制 Bean 是否创建
-
场景:功能开关、环境切换、按需加载
-
核心:配置匹配 → 加载Bean;不匹配 → 不加载
-
关键参数:
prefix/name(配置名)、havingValue(期望值)、matchIfMissing(无配置时默认行为)
本文发布于程序达人 ,转载请注明出处,谢谢合作
有 0 人认为有用
0 评论
共同学习,写下你的评论
相关热点文章推荐
Spring Boot文档翻译【转】
20661
2024-01-13 23:29
Spring Boot报java.lang.IllegalArgumentException:Property 'sqlSessionFactory' or 'sqlSessionTemplate'
16473
2024-01-13 23:29
SpringBoot 2.0 报错: Failed to configure a DataSource: 'url' attribute is not specified and no embe...
UploadiFive Documentation (api 说明文档)
9899
2024-01-13 23:29
svn: 目录中的条目从本地编码转换到 UTF8 失败 解决办法
5336
2024-01-13 23:29
解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile办法
4393
2024-01-13 23:29
程序达人 - chengxudaren.com
一个帮助开发者成长的社区
相关文章