70

在我的应用程序中,我使用了几个配置文件来使某些 bean 符合自动装配的条件。我缺少的是当某个配置文件不活动时使 bean 有资格进行自动装配的可能性。

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

  1. 假设我们有一个所有可能配置文件的列表,例如{A, B, C, D}。
  2. 对特定执行活动的配置文件是 {A, C}。
  3. 我所做的是为所有可能的非活动配置文件创建人工配置文件。在示例情况下,我将创建 {not_B, not_D} 配置文件。
  4. 我想根据X我为 profile激活的非活动配置文件激活 bean not_X。在我的情况下,如果我希望 bean 在配置文件 B 不活动时有资格进行自动装配,我会注释它们@Profile("not_B")

但是,此解决方案需要预先了解所有可能的配置文件。

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

4

1 回答 1

103

您可以使用 not (!) 运算符...但您必须使用 Spring 3.2 M1。

现在支持以下语法

<beans profile="A,!B">

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

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

请参阅此处宣布的更改:Spring Framework 3.2 M1 Released
提交在 GitHub:支持 not (!) operator for profile selection
JIRA 中的问题:SPR-8728

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

于 2012-11-26T23:55:42.487 回答