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

Shy*_*hyJ 53 java spring negation spring-profiles

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

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

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

然而,该解决方案需要关于所有可能的配置文件的前期知识.

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

awe*_*old 71

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

现在支持以下语法

<beans profile="A,!B">

@Profile("A", "!B")
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 我想知道我们是否可以做一个 @Profile("!default", "!test") (2认同)