@ConditionalOnProperty 是 Spring Boot 提供的一个条件注解,用于根据配置文件中的属性值来决定是否加载某个 Bean 或者配置类。它可以帮助我们在不同的环境下灵活地启用或禁用某些功能。
使用场景
根据配置文件中的属性值来决定是否加载某个 Bean。
根据不同的环境配置来启用或禁用某些功能。
注解参数
@ConditionalOnProperty 注解有几个常用的参数:
prefix
:属性的前缀。name
:属性的名称。havingValue
:属性的期望值,默认是true
。matchIfMissing
:如果属性不存在,是否匹配,默认是false
。
示例代码
假设我们有一个功能开关 feature.enabled
,我们希望在这个开关为 true
时才加载某个 Bean。
配置文件
在 application.properties
文件中添加配置:
feature.enabled=true
Java 代码
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FeatureConfig {
@Bean
@ConditionalOnProperty(prefix = "feature", name = "enabled", havingValue = "true", matchIfMissing = false)
public MyFeatureBean myFeatureBean() {
return new MyFeatureBean();
}
}
class MyFeatureBean {
// Bean 的具体实现
}
参数解释
prefix = "feature"
:表示属性的前缀是feature
。name = "enabled"
:表示属性的名称是enabled
。havingValue = "true"
:表示当feature.enabled
的值为true
时,才会加载myFeatureBean
。matchIfMissing = false
:表示如果feature.enabled
属性不存在,则不加载myFeatureBean
。
其他示例
根据多个属性值同时满足时加载 Bean
@Bean
@ConditionalOnProperty(prefix = "feature", name = {"enabled", "anotherProperty"}, havingValue = "true")
public AnotherFeatureBean anotherFeatureBean() {
return new AnotherFeatureBean();
}
@Bean
@ConditionalOnProperty(prefix = "feature", name = "enabled", havingValue = "true")
@ConditionalOnProperty(prefix = "feature", name = "version", havingValue = "1.0")
public AnotherFeatureBean anotherFeatureBean() {
return new AnotherFeatureBean();
}
属性不存在时也加载 Bean
@Bean
@ConditionalOnProperty(prefix = "feature", name = "enabled", matchIfMissing = true)
public DefaultFeatureBean defaultFeatureBean() {
return new DefaultFeatureBean();
}
总结
@ConditionalOnProperty 注解是一个非常有用的工具,可以帮助我们根据配置文件中的属性值来灵活地控制 Bean 的加载,从而实现不同环境下的功能开关。通过合理使用这个注解,可以使我们的应用更加灵活和可配置。