使用场景
我们可能会遇到,根据不同的环境(开发、测试、生产等等),来判断是否加载某个功能,例如:登录校验。在开发、测试环境,为了方便开发调试,我们时常不必进行用户的登录校验,但是对于生产环境这个功能又必不可少。最原始的做法就是在开发、测试环境的代码上注释掉登录校验的功能以方便开发调试,而在生产环境的代码中再去掉注释,这样反复切换不但麻烦还容易出错。这时候,@ConditionalOnProperty 就提供了一个更好的解决方案。
作用
spring boot 通过 @ConditionalOnProperty 来控制加了 @Configuration 注解的类中哪些 @Bean 可以被加载
使用方法
我们先来看一段使用了 @ConditionalOnProperty 的代码
@Configuration
public class ApiConfiguration {
@ConditionalOnProperty(prefix = "myproject", name = "loginCheck", havingValue = "true", matchIfMissing = true)
@Bean
public LoginChecker loginChecker() {
return new LoginChecker();
}
}
该代码片段要表达的意思是,如果所在项目的 application.yaml(如下图) 文件中存在 myproject.loginCheck=true,则 LoginChecker 将会被加载,否则将不会被加载。
server:
port:8080
# 对应上边代码截图中 @ConditionalOnProperty 的配置
myproject:
loginCheck: true