web-dev-qa-db-ja.com

プロファイルがアクティブでないときにBean定義を含める

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

私が考えた最善の方法は次のとおりです。

  1. すべての可能なプロファイルのリストがあるとしましょう。 {あいうえお}。
  2. 特定の実行に対してアクティブなプロファイルは{A、C}です。
  3. 私がしていることは、アクティブではないすべての可能なプロファイルに対して人工的なプロファイルを作成することです。この例では、{not_B、not_D}プロファイルを作成します。
  4. アクティブではないプロファイルXに基づいてアクティブにしたいBeanは、プロファイル_not_X_に対してアクティブにします。私の場合、プロファイルBがアクティブではないときにBeanを自動配線に適格にしたい場合は、@Profile("not_B")アノテーションを付けます

ただし、このソリューションには、可能なすべてのプロファイルに関する事前知識が必要です。

より良い解決策はありますか?

48
ShyJ

Not(!)演算子を使用できますが、Spring 3.2 M1を使用する必要があります。

次の構文がサポートされるようになりました

<beans profile="A,!B">

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

プロファイル「A」がアクティブであるか、プロファイル「B」がアクティブでない場合にのみ、要素または注釈付きコンポーネントを処理する必要があることを示します。

ここで発表された変更を参照してください: Spring Framework 3.2 M1リリース
コミットはGitHubで行われます。 プロファイル選択で(!)演算子をサポートしない
JIRAの問題: SPR-8728

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

62
aweigold