【问题标题】:Autowiring not working outside controller自动装配在控制器外部不起作用
【发布时间】:2014-01-03 22:41:02
【问题描述】:

我在我的一个项目中使用自动装配。 @autowiring 在控制器中工作正常,但我需要在其他一些类中使用相同的自动装配对象,该类用作石英的任务类。自动装配在那里不起作用。

我尝试了下面列出的这段代码,但没有成功。在所有尝试中,它都将null 换成readXmlDao

@Repository("updateTeam")
public class TeamUpdate {
    @Autowired
    @Qualifier("readXmlDao")
    ReadXmlDao readXmlDao;

请提出解决方案,谢谢。

【问题讨论】:

  • 你有两个独立的项目吗?你如何包含spring context.xml?
  • TeamUpdate 类是否与您的控制器在同一个项目中?或者您的 是否涵盖了您的 TeamUpdate 类?
  • quartz 是否在实例化 TeamUpdate 类?只有当 spring 实际实例化类时,Spring 自动布线才会起作用。

标签: java spring ioc-container autowired


【解决方案1】:

您可能想尝试这种方法来在非 Spring 托管对象中使用 Spring 托管 bean。

http://www.javacodegeeks.com/2015/03/using-spring-managed-bean-in-non-managed-object.html

【讨论】:

    【解决方案2】:

    Spring 将永远不会留下@Autowired 目标null。如果它正在处理 bean 并且找不到匹配项,它将引发异常。

    既然您告诉我们它是null,唯一的可能是Spring 管理您的对象。您要么手动创建 TeamUpdate 对象,要么其他进程(不是 Spring)为您创建它。

    【讨论】:

    • 谢谢你:),你节省了我的时间。
    • @Vivek Here's 更全面的帖子。
    【解决方案3】:

    Autowire 在 spring 上下文中工作(由 spring 管理的类实例)。 Quartz 创建自己的上下文(创建自己的实例)。 Spring 不必知道这些类以及为什么 autowires 不能在它们上工作。

    更多的是 spring/quartz 配置问题,而不是类注释问题。

    【讨论】:

      【解决方案4】:

      在您的 spring-servlet 文件中确保您正在扫描正确的包。

      <context:component-scan base-package="your package here"/>
      

      很多时候,您可能会将控制器和存储库放在不同的包中。确保同时扫描两者。

      【讨论】:

        猜你喜欢
        • 2013-07-14
        • 2014-06-12
        • 2022-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-01
        • 2017-01-19
        相关资源
        最近更新 更多