在我的库中, FooLibrary.jarSpring 实例化com.example.FooImpl了具有属性的类bars。我有很多Bar实例也由 Spring 实例化。一组条形图自动连接成FooImpl这样:
@Component
public class FooImpl {
@Inject
private Set<Bar> bars;
在独立应用程序中,Spring 实例化Bar实例,实例化FooImpl实例,然后FooImpl.bars与Bars 集合自动装配。有用。
现在我在 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