0

私のライブラリ内で、FooLibrary.jarSpringcom.example.FooImplはプロパティを持つクラスをインスタンス化しますbarsBarSpring によってインスタンス化されたインスタンスも多数あります。バーのセットは、次のFooImplように自動配線されます。

@Component
public class FooImpl {
  @Inject
  private Set<Bar> bars;

スタンドアロン アプリケーションでは、Spring はインスタンスをインスタンス化し、Barインスタンスをインスタンス化し、一連のs でFooImpl自動配線します。できます。FooImpl.barsBar

現在、Tomcat 内の webapp で同じ Spring 構成を実行しています。FooLibrary.jarは内部WEB-INF/libにあり、すべてが上で概説したように機能し続けます。

問題は、Web アプリが を使用していくつかのクラスを自動的にコンパイルすることですJavaCompiler。これは、そのライブラリをスタートアップの Tomcat パスに配置しない限り、動的にコンパイルするための依存関係を見つけることができません。Tomcat クラスパスに追加FooLibrary.jarした瞬間 (たとえば、Eclipse 内の Tomcat の起動構成で、またはstartup.shTomcatをsetclasspath.batスタンドアロンで実行していると思われます)、autowire が機能しなくなります。

つまり、私の webapp が起動すると、Spring はすべてのBarインスタンスを作成し、インスタンス化しますFooImplが、 sのセットを にオートワイヤーすることはありません理由はありますか?BarFooImpl.bars

(SpringContextLoaderListenerが webapp クラスローダから開始されることと関係がありますが、FooImplインスタンスBarは Tomcat クラスローダから来るのでしょうか?)

4

1 に答える 1

0

互換性のないタイプ (複数のクラスローダーにロードされたクラスなど) が原因で、自動配線が失敗することがあります。

すでに JAR を tomcat のブート クラスパスに配置しているため、JAR を WEB-INF/lib に配置しなくても、webapp からも見えるようにする必要があります。

依存関係のスコープprovidedを作成して、Maven が WEB-INF/lib に配置しないようにすることができます。

于 2013-06-13T18:25:21.563 に答える