データ モデルに 1 つのプロジェクトを使用するプロジェクトがいくつかあります。これらのプロジェクトにはそれぞれ独自の applicationContext.xml ファイルがあり、その中に反復的なデータがたくさん含まれています。
modelContext.xml ファイルと、ui.xml 用に別のファイルが必要です。
これはできますか?
Spring Docsから(v 2.5.5 セクション 3.2.2.1.) :
コンテナー定義を複数の XML ファイルに分割すると便利な場合があります。これらすべての XML フラグメントから構成されたアプリケーション コンテキストをロードする 1 つの方法は、複数のリソースの場所を取るアプリケーション コンテキスト コンストラクターを使用することです。Bean ファクトリを使用すると、Bean 定義リーダーを複数回使用して、各ファイルから順番に定義を読み取ることができます。
一般に、Spring チームは上記のアプローチを好みます。これは、コンテナー構成ファイルが他の構成ファイルと結合されているという事実を認識しないためです。別のアプローチは、要素の 1 つ以上のオカレンスを使用して、別のファイル (または複数のファイル) から Bean 定義をロードすることです。サンプルを見てみましょう:
<import resource="services.xml"/> <import resource="resources/messageSource.xml"/> <import resource="/resources/themeSource.xml"/> <bean id="bean1" class="..."/> <bean id="bean2" class="..."/>
この例では、services.xml、messageSource.xml、および themeSource.xml の 3 つのファイルから外部 Bean 定義がロードされています。すべての場所のパスは、インポートを実行する定義ファイルに関連していると見なされるため、この場合の services.xml は、インポートを実行するファイルと同じディレクトリまたはクラスパスの場所にある必要があります。インポートするファイルの場所の下の場所。ご覧のとおり、先頭のスラッシュは実際には無視されますが、これらは相対パスと見なされるため、スラッシュをまったく使用しない方がよいでしょう。インポートされるファイルの内容は、最上位要素を含め、Spring スキーマまたは DTD に従って有効な XML Bean 定義ファイルである必要があります。
これは、Spring の classpath* リソース ローダーを使用して、作業中のプロジェクトで行います。特定のアプリでは、アプリケーション ID を含むすべての appcontext ファイルが読み込まれます。
classpath*:springconfig/spring-appname-*.xml
はい、インポート要素を介してこれを行うことができます。
<import resource="services.xml"/>
各要素のリソース属性は有効なパスです (例: classpath:foo.xml)
ニコラスが私に指摘したことを考えると、ドキュメントでこれを見つけました。これにより、関心のある Bean コンテキストを実行時に選択できます。
GenericApplicationContext ctx = new GenericApplicationContext();
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
xmlReader.loadBeanDefinitions(new ClassPathResource("modelContext.xml"));
xmlReader.loadBeanDefinitions(new ClassPathResource("uiContext.xml"));
ctx.refresh();
これが私のプロジェクトの1つで行ったことです。web.xml
ファイルで、アプリケーションで使用する Spring Bean ファイルを定義できます。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/modelContext.xml
/WEB-INF/ui.xml
</param-value>
</context-param>
これが で定義されていない場合はweb.xml
、自動的に/WEB-INF/applicationContext.xml
はい、「マスター」Beanファイル内のタグを使用できます。しかし、その理由はどうですか?wab.xmlのcontextConfigLocationコンテキストパラメータまたはBeanファクトリのalslocations配列にファイルをリストしないのはなぜですか?
複数のファイルの方がはるかに扱いやすいと思います。テスト用にそれらの一部のみを選択し、名前の変更を追加するか、アプリケーションの一部を削除するだけで、同じ構成ファイル(Webアプリケーションといくつかの重複するBean定義を持つコマンドラインバージョン)で異なるアプリケーションをバインドできます。
もう 1 つ注意すべき点は、これは可能ですが、XML の大ファンでない場合は、Spring 2.5 でアノテーションを使用して多くのことを実行できることです。