5

我有一个带有不同子模块的Spring Boot 应用程序,其中还包含弹簧组件。在主要的 web 模块中,我使用了子模块中 70% 的 bean。它取决于 application.yml 属性,是否启用了属性组(指向 bean)。

首先我想创建Aspect-s,所以当一个bean的方法(它的属性没有启用)被调用时,然后抛出一个异常。这个解决方案可以工作,但是我需要创建 Aspect 类、方法注释、导入越来越多的依赖项。

所以我只是想知道,是否还有其他更简单的解决方案来禁用 bean,或者根本不加载到 Spring Boot 容器中?

我会想象类似的东西@DependsOn,但是为此您需要给出一个 bean 名称的名称,但是您不能使用此注释来处理 yml 属性。

其他简单的解决方案是我想通过spring容器管理的每个bean,而不是子模块中的@Bean所有内容,但它是一个静态设置,不能被yml中的单个属性覆盖。@Import@Import

4

1 回答 1

10

Spring很久以前就引入了条件的概念。Spring Boot 在很大程度上使用它来有条件地启用功能。它甚至创建了许多您可以使用的条件规则。

这些规则之一是属性规则的条件。要使用此规则,请向您的 bean 添加@ConditionalOnProperty注释。现在,仅当所述属性已启用或具有特定值时才会包含在内。

@ConditionalOnProperty(name="your.property.name")
于 2018-09-05T12:20:22.370 回答