组件扫描未在Tomcat webapp中的JAR中找到@Component

Adr*_*nRM 6 spring web-applications opencms applicationcontext

我刚刚在Spring bug系统中提交了一个错误(https://jira.springsource.org/browse/SPR-8551),但我仍然不确定我是否遗漏了某些东西

我跟踪了<context:component-scan/>这个陈述的问题.给定以下两个类在Web应用程序的WEB-INF/lib中的相同JAR中(JAR文件具有目录结构):

测试/ TheBean.java:

package test;
@Component
public class TheBean{
}
Run Code Online (Sandbox Code Playgroud)

测试/ 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? 
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我new BeanSearcher().init()在jUnit测试用例或其他类型的独立应用程序中运行,则会为b分配一个TheBean实例,但是如果我在JSP中运行它,ctx.getBean()则返回null.

所以,我做错了什么或没有考虑到一些事情,这只是一个错误......?

编辑8/8/2011:当我试图简化问题时似乎工作正常,但是,当我尝试使其工作时,在OpenCms的初始化中,它失败了.现在我试图寻找工作版本和不工作版本之间的差异.(类加载器,不同JAR中或直接在WEB-INF /类中的相关类的使用,通过反射调用等)

Adr*_*nRM 10

正如我在评论中写的那样,解决方案由以下答案给出: 基于Spring Annotation的控制器如果在jar文件中则不起作用

在eclipse中使用导出实用程序导出jar文件时,会出现一个名为Add directory entries的选项.