1 つの親コンテキストを持つ複数の Spring コンテキストを作成します。親コンテキストを作成する方法は次のとおりです。
new ClassPathXmlApplicationContext(new String[] {"ApplicationContext/application.xml"})
そして、次の方法で作成したい各親コンテキスト:
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
configurer.setProperties(properties);
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(appContext);
context.addBeanFactoryPostProcessor(configurer);
context.setConfigLocation("ApplicationContext/beans.xml");
context.refresh();
アイデアは、それぞれに同じ Bean 階層を持つ複数の子コンテキスト (DAO、サービス、データ ソース、トランザクション マネージャーなど) を持つことです。複数のコンテキストを持つ理由は、複数の異なるデータ ソース (実際にはアプリケーション コンテキストごとに 1 つ) を持つ必要があるためです。各データ ソースのデータベース構造は同じです。それで、いくつか質問があります。
- そのようなコンテキストの階層を持つことは安全ですか? たとえば、30 の子コンテキストがあるとしますか?
- クロス子コンテキスト Bean の可視性についてはどうですか? たとえば、いくつかの自動配線された DAO 依存関係を持つ @Component アノテーションで宣言されたCustomerService Bean があるとします。Spring は、特定の子コンテキスト内でオートワイヤリングやその他の DI アクションを実行しますか?
- また、次のメソッドを使用して、子コンテキストから Bean を検索します。 childContext.getBean(CustomerService.class); 他の子コンテキストではなく、この特定の子コンテキストから顧客サービスを取得しますか? 春のシングルトンはアプリケーションコンテキストごとのシングルトンであることは知っていますが、まだわかりません。
PS。ここで説明する複数のデータ ソースを処理する別の方法があります。しかし、私の場合、このアプローチはあまり便利ではないようです。