【发布时间】:2011-10-10 01:49:19
【问题描述】:
我刚刚在 Spring 错误系统 (https://jira.springsource.org/browse/SPR-8551) 中提交了一个错误,但我仍然不确定我是否遗漏了什么
我在此声明中发现了 <context:component-scan/> 的问题。
给定以下两个类,它们位于 Web 应用程序的 WEB-INF/lib 中的同一个 JAR 中(JAR 文件具有目录结构):
测试/TheBean.java:
package test;
@Component
public class TheBean{
}
测试/BeanSearcher.java:
package test;
public class BeanSearcher{
public void init(){
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.scan("test");
ctx.refresh();
TheBean b= ctx.getBean(TheBean.class);
// What is the value of b?
}
}
如果我在 jUnit 测试用例或其他类型的独立应用程序中运行 new BeanSearcher().init(),b 将被分配一个 TheBean 实例,但如果我在 JSP 中运行它,ctx.getBean() 将返回 null。
那么,我是做错了什么还是没有考虑到某些事情,这只是一个错误...?
编辑 8/8/2011:它似乎工作得很好,因为我试图简化问题,但是当我试图让它工作时,在 OpenCms 的初始化中,它失败了。现在我正在尝试寻找工作版本和不起作用的版本之间的差异。 (类加载器,在不同JAR或直接在WEB-INF/classes中引用相关类,通过反射调用等)
【问题讨论】:
-
是 webapp 中的 Spring 库还是直接安装到 Tomcat 主库目录中?当后者为真时,我已经看到了一些棘手的问题……
-
Spring 库也在 WEB-INF/lib 中
-
可能与这个问题有关:stackoverflow.com/questions/1242656/…
标签: spring web-applications applicationcontext opencms