@ConditionalOnProperty 是Spring Boot 条件化配置的核心注解之一,能够让你根据配置属性的存在或特定值来决定是否注册一个 Bean 或配置类。
1.注解概述
@ConditionalOnProperty 是一个条件注解,它的作用是:只有当指定的配置属性满足特定条件时,被标注的组件才会被创建并加入到 Spring 容器中。
2.注解源码及属性
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
// --- 主要属性 ---
// 配置属性的前缀(或名称)。与 `name`/`value` 共同构成完整的 key。
String prefix() default "";
// 配置属性的名称(同 `value`)。可以是单个字符串或字符串数组。
// 完整的 key 为: `${prefix}.${name}`
String[] name() default {};
// 与 `name` 属性相同
String[] value() default {};
// 期望配置属性所具有的值。
// 注意:只有当配置属性不为 `false` 时,才会进行值的匹配。
String havingValue() default "";
// 如果在配置中找不到指定的属性,是否应该匹配成功(即条件为真)。
// `true`:如果属性不存在,则条件成立。
// `false`:如果属性不存在,则条件不成立。
boolean matchIfMissing() default false;
}
3.示例
1.检查属性是否存在,不关系值。(配置application.yml)
# application.yml
app:
feature:
cache-enabled: true
new-algorithm: false
@Configuration
public class FeatureConfiguration {
// 只有当 `app.feature.cache-enabled` 这个属性存在时,才会创建这个 Bean
@Bean
@ConditionalOnProperty(name = "app.feature.cache-enabled")
public CacheService cacheService() {
return new RedisCacheService();
}
// 只有当 `app.feature.new-algorithm` 存在时,才会创建这个 Bean
// 注意:即使它的值是 `false`,只要属性存在,Bean 就会被创建!
@Bean
@ConditionalOnProperty("app.feature.new-algorithm") // 使用 value 简写
public AlgorithmService oldAlgorithm() {
return new OldAlgorithmService();
}
}
2.检查属性的特定值(这里我用来决定是否加载对应的响应层)
# application.yml
app:
feature:
cache-enabled: A
new-algorithm: B
@ConditionalOnProperty(name = "app.feature.cache-enabled", havingValue = "A")
@Controller
public class AController {
// 对应的api
}
@ConditionalOnProperty(name = "app.feature.new-algorithm", havingValue = "B")
@Controller
public class BController {
// 对应的api
}
4492

被折叠的 条评论
为什么被折叠?



