0

Bean を使用して特定のエンティティのメタデータを記述するスプリング ベースのアプリケーションがあります。アプリケーションが大きくなるにつれて、メタデータも変更されます。

アプリケーションの新しいリリース時に、古い Bean 定義を新しいものと一緒に維持し、それらをプログラムで使用できるようにしたいと考えています。

私の最初のアイデアは、「バージョン」と呼ばれる新しいプロパティを Bean 定義に追加することでした。その値は、リリース バージョンに対応します。したがって、エンティティの 1 つのメタデータ定義を変更する場合は、古い定義をコピーして貼り付け、必要な変更 (フィールドの追加など) を行い、バージョン フィールドを更新します。

コードでは、Bean をバージョンで簡単にフィルタリングできます。

問題:

当然のことながら、Spring は同じ ID を持つ 2 つの Bean を持つことを許可しません (バージョンによって実際に明確にできるかどうかはわかりません)。Bean 定義に新しいプロパティを追加する代わりに、その名前でバージョンをエンコードする必要があるようです。

これはSpringでそれを行う適切な方法ですか(これに対するOOTBサポートは見つかりませんでした)? この問題を解決する他のパターンはありますか?

4

1 に答える 1

1

同じタイプで同じ名前の 2 つの Bean を同時に持つことはできません。Bean 名にバージョン サフィックスを含めることもできますが、これにより一部の@Autowiredインジェクションが壊れる可能性があります。

Spring プロファイル (3.1 で導入) は、代替コンテキスト構成をすばやく切り替える方法ですが、同時に 2 つをアクティブにすると、再び競合が発生する可能性があります。

于 2013-03-10T17:14:47.830 に答える