我有一个带有不同子模块的 Spring Boot应用程序,该子模块还包含spring组件。 在主要的Web模块中,我使用了子模块中70%的bean。这是否取决于application.yml属性,是否启用了属性组(指向Bean)。
首先,我想创建Aspect-s,因此,当调用bean的方法(其属性未启用)时,将引发异常。此解决方案可能有效,但随后我需要创建Aspect类,方法注释,导入越来越多的依赖项。
所以我只是想知道,是否还有其他更简单的解决方案来禁用Bean,或者根本不加载到Spring Boot容器中?
我会想象像@DependsOn
之类的东西,但是为此您需要提供一个Bean名称的名称,但是您不能使用此注释来使用yml属性。
另一种简单的解决方案是@Bean
或@Import
我想由spring容器管理的每个bean,而不是@Import
来自子模块的所有内容,但这是一个静态设置,不能被yml中的单个属性覆盖。
答案 0 :(得分:5)
Spring早就推出了concept of conditionals。 Spring Boot在很大程度上使用了它来有条件地启用功能。它甚至创建了许多conditional rules可供您使用。
其中一个规则是基于条件的条件规则。要使用此规则,请向您的bean中添加一个@ConditionalOnProperty
注释。现在,仅在启用了上述属性或具有特定值的情况下才包括该属性。
@ConditionalOnProperty(name="your.property.name")