【问题标题】:Component Scan not finding @Component's in a JAR in Tomcat webapp组件扫描未在 Tomcat webapp 的 JAR 中找到 @Component
【发布时间】: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


【解决方案1】:

正如我在评论中所写,这里的答案给出了解决方案: Spring Annotation-based controllers not working if it is inside jar file

当您使用 eclipse 中的导出实用程序导出 jar 文件时 是一个名为添加目录条目的选项。

【讨论】:

  • 非常感谢。我不知道它做了什么(添加目录条目),但是 spring 现在可以在 linux 环境中扫描我的组件了!
【解决方案2】:

显而易见的问题是你的 web.xml 中是否有类似的东西:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>WEB-INF/foo.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

没有这些,Spring 根本不会真正加载,更不用说正确构建 bean...

【讨论】:

  • 我有意识地没有将此配置添加到 web.xml 文件中,因为我希望所有内容都封装在我的 JAR 中。如您所见,我使用的是不需要上下文 XML 文件的 AnnotationConfigApplicationContext。还是我无论如何都需要它?谢谢!
猜你喜欢
  • 2020-02-21
  • 2020-01-23
  • 2017-03-05
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 2018-04-01
相关资源
最近更新 更多