首页 > 解决方案 > 如何将@ConditionalOnProperty 继承到任何静态内部@Configuration 类?

问题描述

如何创建一个@Configuration包含静态内部配置类并继承的类@ConditionalOnProperty

@Configuration
@ConditionalOnProperty(value = "my.property", havingValue = "true")
public class MyConfiguration {
    @Configuration
    static class SubConfig1 {
    }

    @Configuration
    static class SubConfig2 {
    }

    ....
}

在此示例中,我希望仅当父级的条件为真时才加载内部类,因此我不必为每个配置类重复条件。那可能吗?

标签: javaspringspring-boot

解决方案


您对所有带有注释的嵌套类的理解都是错误的,它们@Configuration将被自动加载。使用嵌套的 @Configuration 类

当引导这样的安排时,只需要针对应用程序上下文注册 AppConfig。由于是嵌套的@Configuration 类,DatabaseConfig 将自动注册。当 AppConfig 和 DatabaseConfig 之间的关系已经隐式明确时,这避免了使用 @Import 注释的需要。

因此,通过使用@ConditionalOnProperty,您只能避免在配置类中声明的 bean,但在@Configuration条件指定之前,您无法避免带有注释的嵌套类

例如下面的方法将避免bean加载到ApplicationContextif my.propertyisfalse

@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 {
   }


 }

推荐阅读