私のライブラリ内で、FooLibrary.jar
Springcom.example.FooImpl
はプロパティを持つクラスをインスタンス化しますbars
。Bar
Spring によってインスタンス化されたインスタンスも多数あります。バーのセットは、次のFooImpl
ように自動配線されます。
@Component
public class FooImpl {
@Inject
private Set<Bar> bars;
スタンドアロン アプリケーションでは、Spring はインスタンスをインスタンス化し、Bar
インスタンスをインスタンス化し、一連のs でFooImpl
自動配線します。できます。FooImpl.bars
Bar
現在、Tomcat 内の webapp で同じ Spring 構成を実行しています。FooLibrary.jar
は内部WEB-INF/lib
にあり、すべてが上で概説したように機能し続けます。
問題は、Web アプリが を使用していくつかのクラスを自動的にコンパイルすることですJavaCompiler
。これは、そのライブラリをスタートアップの Tomcat パスに配置しない限り、動的にコンパイルするための依存関係を見つけることができません。Tomcat クラスパスに追加FooLibrary.jar
した瞬間 (たとえば、Eclipse 内の Tomcat の起動構成で、またはstartup.sh
Tomcatをsetclasspath.bat
スタンドアロンで実行していると思われます)、autowire が機能しなくなります。
つまり、私の webapp が起動すると、Spring はすべてのBar
インスタンスを作成し、インスタンス化しますFooImpl
が、 sのセットを にオートワイヤーすることはありません。理由はありますか?Bar
FooImpl.bars
(SpringContextLoaderListener
が webapp クラスローダから開始されることと関係がありますが、FooImpl
インスタンスBar
は Tomcat クラスローダから来るのでしょうか?)