ちょっとしたヒント-アプリケーションの懸念に基づいて、Springxmlコンテキストファイルをモジュール化して明確にラベル付けすると便利だと思いました。これが私が取り組んだWebアプリの例です。
MyProject / src / main / resources / spring /
- datasource.xml- 私の単一のデータソースBean。
- persistence.xml- 私のDAO/リポジトリ。
datasource.xml
Beanに依存し
- services.xml- サービスレイヤーの実装。これらは通常、AOPを使用してトランザクション性を適用するBeanです。
persistence.xml
Beanに依存し
- controllers.xml- 私のSpringMVCコントローラー。
services.xml
Beanに依存し
- views.xml-私のビューの実装。
このリストは完全でも網羅的でもありませんが、それが要点を示していることを願っています。最適な命名戦略と粒度を選択してください。
私の(限られた)経験では、このアプローチが次の利点をもたらすのを見てきました。
より明確なアーキテクチャ
明確に名前が付けられたコンテキストファイルは、プロジェクト構造に慣れていない人に、Bean定義の検索を開始するための合理的な場所を提供します。循環/不要な依存関係の検出を少し簡単にすることができます。
ドメイン設計を支援します
Bean定義を追加したいが、それがどのコンテキストファイルにもうまく適合しない場合は、新しい概念や懸念が浮上している可能性がありますか?例:
- サービスレイヤーをAOPでトランザクション化するとします。それらのBean定義をに追加します
services.xml
か、それとも独自に配置しtransactionPolicy.xml
ますか?チームと話し合ってください。トランザクションポリシーはプラグ可能である必要がありますか?
- Acegi / Spring Security Beanをファイルに追加しますか、それともコンテキストファイル
controllers.xml
を作成しますか?security.xml
展開/環境ごとに異なるセキュリティ要件がありますか?
統合テスト
統合テスト用にアプリケーションのサブセットを接続できます(例:上記のファイルを指定して、作成する必要があるデータベースdatasource.xml
とpersistence.xml
Beanのみをテストします)。
具体的には、統合テストクラスに次のように注釈を付けることができます。
@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })
SpringIDEのBeansグラフでうまく機能します
焦点を絞った名前の付いたコンテキストファイルがたくさんあると、SpringIDEのBeansGraphを使用してアプリのレイヤーを視覚化するカスタムBeansConfigSetを簡単に作成できます。以前、これを使用して、新しいチームメンバーにアプリケーションの組織の概要を説明しました。