在我的库中, FooLibrary.jar
Spring 实例化com.example.FooImpl
了具有属性的类bars
。我有很多Bar
实例也由 Spring 实例化。一组条形图自动连接成FooImpl
这样:
@Component
public class FooImpl {
@Inject
private Set<Bar> bars;
在独立应用程序中,Spring 实例化Bar
实例,实例化FooImpl
实例,然后FooImpl.bars
与Bar
s 集合自动装配。有用。
现在我在 Tomcat 内的 webapp 中运行相同的 Spring 配置。FooLibrary.jar
在里面WEB-INF/lib
,一切都按照上面的描述继续工作。
问题是 Web 应用程序使用 自动编译 somes 类,除非我将该库放在启动 Tomcat 路径上,否则JavaCompiler
无法找到其动态编译的依赖项。我添加FooLibrary.jar
到 Tomcat 类路径的那一刻(例如,在 Eclipse 内的 Tomcat 启动配置中,或者我假设startup.sh
或者setclasspath.bat
如果单独运行 Tomcat),自动装配停止工作。
也就是说,当我的 webapp 启动时,Spring 会创建所有Bar
实例,然后实例化FooImpl
,但不会Bar
将s集合自动连接到FooImpl.bars
. 知道为什么吗?
(这是否与ContextLoaderListener
从 webapp 类加载器启动的 Spring 有关,但我想知道来自 Tomcat 类加载器的实例?FooImpl
)Bar