8

私はSpring Webベースのアプリケーションを動作させています。今度は、別のプロジェクトでもそのパーツを再利用したいと考えています。したがって、私は2つの質問があります:

  1. 再利用可能なライブラリなどの機能をパックするための推奨される方法は何ですか? 内部にアプリケーション コンテキスト XML を含む JAR ファイルまたは JAR + 追加の XML ? 他の何か?
  2. そのようなライブラリを別の Spring (Web) ベースのプロジェクト (異なる名前空間 - パッケージ) に組み込む方法@Autowiredは? クラスパス上の単純な JAR では不十分だと思います - lib のアプリケーション コンテキストなどを参照するにはどうすればよいですか? 他にどのような手順が必要ですか?
4

2 に答える 2

5

私が使用するアプローチは、アプリケーション コンテキスト フラグメントがライブラリ jar ファイル内のよく知られた場所にあることを確認することです (個人的には を使用しますMETA-INF/spring)。したがって、名前の付いたファイルにいくつかの一般的なセキュリティ構成と Bean がある場合があります。META-INF/spring/common-security-context.xml

クライアント アプリケーション (ライブラリを使用するアプリケーション) では、アプリケーション コンテキスト内で次のようなインポートを行うことにより、すべての共有ライブラリからのサービスと Bean を含めることができます。

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

(クラスパスの後のアスタリスクに注意してください)。META-INF/spring/*-context.xmlこれにより、実行中のアプリケーションから見える任意の jar ファイルまたはクラスパス ルートのパターンに名前が一致するファイルが検索され、それらが 1 つの論理コンテキストに集約されます。必要に応じてワイルドカードを調整します。

これを広く使用し始めた場合に発生する可能性のある Bean/サービス名の衝突を回避するための戦略が明らかに必要になります。

于 2013-10-01T12:47:31.340 に答える
2

何に依存しているかを示す何らかのパッケージを使用する必要があります。一般的なオプションは、依存関係を説明する pom.xml ファイルを提供するMavenパッケージを使用することです。作業が完了したら、アプリの Maven リリースを行います。

使用するときは、アプリのスプリング構成で共有構成テンプレートを参照する必要があります。直接インポートできます:

<import resource="classpath*:/META-INF/path/to/otherAppContext.xml" />

これは、Spring コンテキスト構成を実際に共有することを前提としています。再利用可能なクラス (のみ) を提供している場合は、通常、コンテキスト構成を共有する必要はありません。

于 2013-10-01T12:35:51.340 に答える