Spring Boot-仅在由属性启用的情况下加载Bean

时间:2018-09-05 10:11:44

标签: spring-boot import javabeans aop depends

我有一个带有不同子模块的 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中的单个属性覆盖。

1 个答案:

答案 0 :(得分:5)

Spring早就推出了concept of conditionals。 Spring Boot在很大程度上使用了它来有条件地启用功能。它甚至创建了许多conditional rules可供您使用。

其中一个规则是基于条件的条件规则。要使用此规则,请向您的bean中添加一个@ConditionalOnProperty注释。现在,仅在启用了上述属性或具有特定值的情况下才包括该属性。

@ConditionalOnProperty(name="your.property.name")