10

Spring IoC を使用するマルチモジュール Maven プロジェクトがあります。

parent-proj
  - module1
  - module2
  - module3
  - web-module

私が質問するのは:

applicationContext ファイルをアセンブルするためのベスト プラクティスは何ですか? web-module で巨大な applicationContext-web.xml を作成する必要がありますか? または、各サブモジュールに applicationContext-module<#>.xml を作成し、それらすべてを applicationContext-web.xml にインポートする必要がありますか?

私は2番目のオプションを使用しています。現在は、少し制御不能になっているように見えます (たとえば、Bean が同じ ID の Bean をオーバーライドするなど)。

ありがとう。

4

2 に答える 2

10

まず、module1、module2、および module3 が Web モジュールで参照および使用される純粋な Java ライブラリ (たとえば、ドメイン モデル、DAO、サービス クラスなどを含む) である場合、通常、この純粋な Java ライブラリで Spring コンテナーを操作しません。 .

次に、Spring コンテナーをプロジェクト モジュールごとに分割しないでください。必要に応じて、Spring コンテナーをアプリケーション レイヤーごとにスピルし、web-module プロジェクトで複数の applicationContext ファイルを定義できます (単一の巨大な applicationContext.xml を回避するため)。たとえば、これは私たちが通常行っていることです。

web-module/src/main/webapp/WEB-INF:
  applicationContext-dataAccess.xml
  applicationContext-dataStore.xml
  applicationContext-security.xml
  applicationContext-web.xml
  ... ...
  web.xml

それが理にかなっていることを願っています。

于 2012-10-17T01:40:41.440 に答える
5

私も 2 番目の方法を好みますが、Springclasspath*:疑似 URL を使用します。何かのようなもの:

<import resource="classpath*:META-INF/module-context.xml" />

これにより、モジュールの META-INF フォルダーにモジュール xml Bean 定義が読み込まれます。

現在は、少し制御不能になっているように見えます (たとえば、Bean が同じ ID の Bean をオーバーライドするなど)。

それは単にプロジェクトを組織することの問題です。私は常に@Autowired、Spring が宣言したインターフェースに基づいて依存関係を解決できるように使用しようとします。そしてもちろん、ID に関するこの種の問題を回避するためにモジュール外のパッケージをスキャンすることは決してありません。

自動配線が不可能な場合は、xml のみで Bean を宣言し、そこに ID を配置します。

基本的な考え方 (Spring ではなくモジュール プロジェクトの場合) については、こちらで詳しく説明されています。

于 2012-10-16T19:20:20.017 に答える