web-dev-qa-db-ja.com

子コンテキストの親コンテキストで定義されたBeanをオーバーライドする

私たちのアプリには、マルチテナンシーをサポートするための要件が​​あります。搭乗した各顧客は、コアプラットフォームレベルで定義された1つ以上のBeanまたはBeanの一部のプロパティ(共通コード/定義)をオーバーライドする可能性があります。私はこれを処理するための最良の方法は何であるか疑問に思っています。

22
Aravind Yarram

Springを使用すると、同じBean名を複数回再定義でき、指定された名前に対して処理された最後のBean定義が優先されます。したがって、たとえば、コアBeanを定義するXMLファイルを作成し、それをクライアント固有のXMLファイルにインポートして、それらのBeanの一部を再定義することができます。ただし、「このBean定義はオーバーライドです」と具体的に言うメカニズムがないため、少し壊れやすいです。

これを処理する最もクリーンな方法は、 Spring3で導入された新しい@Bean-構文 を使用することであることがわかりました。 BeanをXMLとして定義するのではなく、Javaで定義します。したがって、コアBeanは1つの@Beanアノテーション付きクラスで定義され、クライアント構成はそれをサブクラス化し、適切なBeanをオーバーライドします。これにより、標準のJava @Overrideアノテーションを使用して、特定のBean定義がオーバーライドされていることを明示的に示すことができます。

33
skaffman