包括配置文件未处于活动状态时的 Bean 定义

2022-08-31 13:50:53

在我的应用程序中,我使用几个配置文件来使某些Bean符合自动布线的条件。我缺少的是当某个配置文件不活动时使Bean符合自动布线条件的可能性。

我想到的最好的方法是这样的:

  1. 假设我们有一个所有可能的配置文件的列表,例如{A,B,C,D}。
  2. 为特定执行而激活的配置文件为 {A, C}。
  3. 我所做的是为所有可能的非活动配置文件创建人工配置文件。在示例案例中,我将创建 {not_B, not_D} 配置文件。
  4. 我想要基于非活动配置文件处于活动状态的豆子,我为配置文件激活。在我的情况下,如果我希望一个bean在配置文件B不活动时有资格进行自动布线,我会注释它们Xnot_X@Profile("not_B")

但是,此解决方案需要有关所有可能配置文件的前期知识。

你能想到更好的解决方案吗?


答案 1

您可以使用非 (!) 运算符...但你必须使用弹簧3.2 M1。

现在支持以下语法

<beans profile="A,!B">

@Profile({"A", "!B"})

指示仅当配置文件“A”处于活动状态或配置文件“B”未处于活动状态时,才应处理元素或带注释的组件。

请参阅此处宣布的更改: Spring Framework 3.2 M1 已发布
提交在 GitHub 上:不支持 (!) 运算符用于配置文件选择
JIRA 中的问题:SPR-8728

如果您的项目无法升级到Spring 3.2,我建议不要使用这种方法,并确保不会在Spring配置中创建Bean。@Profile


答案 2

推荐