2010-11-22 6 views
21

私たちのアプリはマルチテナントをサポートする必要があります。ボード化された顧客のそれぞれは、コアプラットフォームレベル(共通コード/定義)で定義された1つ以上のBeanまたはBeanのプロパティをオーバーライドする可能性があります。私はこれを処理する最善の方法は何か不思議です。子コンテキストで親コンテキストで定義されたBeanをオーバーライドします

答えて

32

Springでは、同じBean名を複数回再定義することができ、指定された名前に対して処理された最後のBean定義を勝つものとして扱います。たとえば、コアBeanを定義するXMLファイルを作成し、それをクライアント固有のXMLファイルにインポートすると、それらのBeanのいくつかが再定義されます。しかし、「このBean定義はオーバーライドです」とは特に言えないため、やや脆弱です。

これを処理する最もクリーンな方法はnew @Bean-syntax introduced in Spring 3です。 BeanをXMLとして定義するのではなく、Javaで定義します。したがって、コアBeanは1つの@Beanという名前のクラスに定義され、クライアントのconfigsはそのクラスをサブクラス化し、適切なBeanをオーバーライドします。これにより、標準のjava @Overrideアノテーションを使用して、指定されたBean定義がオーバーライドされていることを明示的に示すことができます。

+0

子ctxで同じID /名前のBeanを再定義できますか? –

+9

このページを見るhttp://stackoverflow.com/tags/spring/topusers彼は彼が何を話しているのか分かっていると思うだろう –

+0

ありがとう。私は彼のポストの正確さに疑問を呈していない。私はdevのリソースから、これが新しいバージョンのspring(つまり2.5.x以降)では不可能であると言われているので、その特定のステートメントに対する再保証をしたかったのです。彼は、同じ名前の子コンテキストでBean(親コンテキストで定義されていた)を再定義しようとしましたが、起動中にエラーを受け取りました。 –

関連する問題