【问题标题】:No bean named '...' is defined and Spring @Resource annotation没有定义名为 '...' 的 bean 并且 Spring @Resource 注释
【发布时间】:2010-04-14 14:53:04
【问题描述】:

我使用@Resource 来注释bean 类,@Autowired 来自动装配依赖项, 在 Spring 配置文件中这些东西:

上下文:组件扫描 base-package="package1,package2" tx:注释驱动

所以,它工作正常(经过测试)。 Spring使用@Resource注解扫描package1、package2、classes 然后我可以使用 getBean() IF TESTED FROM CONSOLE APPLICATION [比如说,使用 main() 函数] 来获取它们。

但是当我尝试使用下一种方法时(在容器管理环境中使用 Spring = 与 Tomcat):

contextConfigLocationclasspath*:beans.xmlorg.springframework.web.context.request.RequestContextListenerorg.springframework.web.context.ContextLoaderListener

用所有 bean 类编译一个 jar 并将这个 jar 放入 WEB-INF/lib

那我看到了什么?我无法 getBean() 任何 @Resource 注释的 bean!
Spring 根本找不到它们。
我仍然可以 getBean() 明确存在于 beans.xml 中的 bean。


问题出在哪里?

【问题讨论】:

  • 您能重新格式化您的第一个代码 sn-p 吗?

标签: java spring tomcat servlets


【解决方案1】:

缺少<context:annotation-config/>

<context:annotation-config/>    
<context:component-scan base-package="package1"/>
<context:component-scan base-package="package2"/>
<tx:annotation-driven transaction-manager="transactionManager" />

or 

<context:annotation-config/>    
<context:component-scan base-package="package1, package2"/>
<tx:annotation-driven transaction-manager="transactionManager" />

【讨论】:

    【解决方案2】:

    我不确定它在独立模式下是如何工作的,但是 Spring 上下文中的 "" 元素允许使用 "@Resource" 注释。查看 Spring 文档了解更多信息。

    【讨论】:

    • @David M. Karr 你的意思是你不确定?我说,我测试了这个东西,在单机模式下它工作正常,web-app 和 Spring 之间的凝聚力问题。
    • 我说我不确定它是如何独立工作的,因为我看到的配置错误不会在独立应用程序与 Web 应用程序中自行解决。我还看到我试图提供的关键信息被省略了,因为我没有避开尖括号。你需要有“context:annotation-config”元素。
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2016-11-29
    • 2017-01-10
    相关资源
    最近更新 更多