70

私のアプリケーションでは、いくつかのプロファイルを使用して、特定のBeanを自動配線の対象にします。私が見逃しているのは、特定のプロファイルがアクティブでないときにBeanを自動配線の対象にする可能性です。

私が考えたそれを行うための最良の方法は次のようなものです:

  1. {A、B、C、D}など、考えられるすべてのプロファイルのリストがあるとします。
  2. 特定の実行に対してアクティブなプロファイルは{A、C}です。
  3. 私がしていることは、アクティブではないすべての可能なプロファイルに対して人工的なプロファイルを作成することです。この例では、{not_B、not_D}プロファイルを作成します。
  4. 非アクティブなプロファイルに基づいてアクティブにしたいBeanはX、プロファイルに対してアクティブにしますnot_X。私の場合、プロファイルBがアクティブでないときに、Beanを自動配線の対象にしたい場合は、それらに注釈を付けます。@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 がリリースされ
ました コミットは GitHub にあります:プロファイル選択のための not (!) 演算子のサポート
JIRA の問題: SPR-8728

プロジェクトで Spring 3.2 にアップグレードできない場合は、この@Profileアプローチを使用せず、Spring 構成で Bean が作成されないようにすることをお勧めします。

于 2012-11-26T23:55:42.487 に答える