java - 如何将@ConditionalOnProperty 继承到任何静态内部@Configuration 类?
问题描述
如何创建一个@Configuration
包含静态内部配置类并继承的类@ConditionalOnProperty
?
@Configuration
@ConditionalOnProperty(value = "my.property", havingValue = "true")
public class MyConfiguration {
@Configuration
static class SubConfig1 {
}
@Configuration
static class SubConfig2 {
}
....
}
在此示例中,我希望仅当父级的条件为真时才加载内部类,因此我不必为每个配置类重复条件。那可能吗?
解决方案
您对所有带有注释的嵌套类的理解都是错误的,它们@Configuration
将被自动加载。使用嵌套的 @Configuration 类
当引导这样的安排时,只需要针对应用程序上下文注册 AppConfig。由于是嵌套的@Configuration 类,DatabaseConfig 将自动注册。当 AppConfig 和 DatabaseConfig 之间的关系已经隐式明确时,这避免了使用 @Import 注释的需要。
因此,通过使用@ConditionalOnProperty
,您只能避免在配置类中声明的 bean,但在@Configuration
条件指定之前,您无法避免带有注释的嵌套类
例如下面的方法将避免bean加载到ApplicationContext
if my.property
isfalse
@Configuration
@ConditionalOnProperty(value = "my.property", havingValue = "true")
public class MyConfiguration {
@Bean
public SubConfig1 getSubConfig1() {
return new SubConfig1();
}
@Bean
public SubConfig2 getSubConfig2() {
return new SubConfig2();
}
static class SubConfig1 {
}
static class SubConfig2 {
}
}
推荐阅读
- java - 将 MySQL json 列映射到 JPA 会引发错误
- rest - 在 REST api 中的多对多关系中关联/分离条目的正确方法是什么?
- html - 如何禁用颜色混合
- arraylist - 读取存储在区块链中的数据
- graphql - 如何在 GraphQL 突变/解析器中为每个用户创建和停止唯一的计时器
- android - MediaPlayer 随机停止工作
- java - 将值从异步方法写入文本框时出现 Android Studio 错误
- html - 使用base64转换将图像存储到本地存储,并显示在下一页,Angular 6
- javascript - 如何使用 document.getElementsByClassName 和 Element.classList 正确切换类
- python - Django 上的 Paho-mqtt 客户端