在配置文件处于非活动状态时包含bean定义

时间:2012-11-26 23:51:24

标签: java spring spring-profiles negation

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

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

  1. 我们假设我们列出了所有可能的配置文件,例如: {A,B,C,D}。
  2. 特定执行活动的配置文件是{A,C}。
  3. 我所做的是为所有可能无效的配置文件创建人工配置文件。在示例中,我将创建{not_B,not_D}个人资料。
  4. 我希望根据不活跃的个人资料X激活我的广告素材。我为个人资料not_X设置了有效广告。在我的情况下,如果我想要一个bean在配置文件B不活动时有资格进行自动装配,我会注释它们@Profile("not_B")
  5. 但是,此解决方案需要有关所有可能配置文件的前期知识。

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

1 个答案:

答案 0 :(得分:60)

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

  

现在支持以下语法

<beans profile="A,!B">

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

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

见此处公布的变更:Spring Framework 3.2 M1 Released
提交是在GitHub:Support not (!) operator for profile selection
JIRA中的问题:SPR-8728

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