0

私は春ベースの Web サービスを持っています。私は今、豆でそれを拡張する一種のプラグインを構築したいと考えています。私が今 web.xml に持っているものは次のとおりです。

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/*-configuration.xml</param-value>
</context-param>

私のコアアプリにはmain-configuration.xml、そのBeanを宣言するものがあります。私のプラグインアプリにはplugin-configuration.xml、追加の Bean を宣言するものがあります。デプロイすると、ビルドがデプロイplugin.jarされ、すべての配下/WEB-INF/lib/にコピーplugin-configuration.xmlされます。/WEB-INF/classes/main.war

これで問題ありませんが (もっと良い解決策があると思いますが)、プラグインを開発するときに、Eclipse に依存関係のある 2 つのプロジェクトを作成したくありません。main.jarライブラリとして含めたいと思います。ただし、web.xmlfrommain.jarは自動的に検出されません。これどうやってするの?豆注入?ある種の豆の発見?他の何か?

注: 本番環境には複数の異なるプラグインがあると予想していますが、それぞれの開発は純粋な main.jar に対して行われます。

ありがとうございました。

4

2 に答える 2

1

もっと簡単なアプローチがあると思います:

ホスト アプリケーション (webapp) で、次のようなcontextConfigLocationパラメーターを定義します。

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:/META-INF/foo/*-configuration.xml</param-value>
</context-param>

重要な部分はclasspath*:、次のパターンに一致する構成ファイルのクラスパス全体をスキャンすることになるためです。classpath:ルックアップのみを使用すると、最初に見つかったファイルで停止します。また、スターが正しく付けられていないと、JAR をトラバースしません。

2 番目の重要な部分は、ルックアップが機能するために、ワイルドカードを使用しないベースパスを少なくとも 1 つ持つことです。これはClassloader、基本パスが含まれている場合にのみ確実にすべてのリソースを返す特性によるものです (詳細については、Javadocを参照しPathMatchingResourcePatternResolverてください)。

プラグイン プロジェクトでやらなければならないことは、JAR としてパッケージ化plugin-configuration.xml/META-INF/foo/てクラスパスに配置することです (Maven でビルドする場合は、依存関係を追加するだけです)。

アプリケーションの開始時に、Spring はプラグインからすべての構成ファイルを取得し、em から「applicationContext」を構築します。

また、Spring を使用したアプリケーションのモジュール性について私が行った別の投稿をチェックアウトすることもできます: How do you make a multi-module spring configuration?

于 2010-03-26T12:30:16.607 に答える
1

の代わりに/WEB-INF/classes/*-configuration.xml、試してみてくださいclasspath:*-configuration.xml 。構成ファイルをそれぞれ新しい行にリストすることもできます。

main.jar が WEB-INF/lib にあることを確認する必要があります。maven を使用していない場合は、Eclipse でこれを行うことができます。プロジェクト プロパティ。

于 2010-03-25T07:39:15.300 に答える