私のライブラリ内で、FooLibrary.jarSpringcom.example.FooImplはプロパティを持つクラスをインスタンス化しますbars。BarSpring によってインスタンス化されたインスタンスも多数あります。バーのセットは、次の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 クラスローダから来るのでしょうか?)