【问题标题】:@Resource annotation producing NPE@Resource 注解产生 NPE
【发布时间】:2013-10-14 21:45:39
【问题描述】:

我“继承”了一个包含 spring-ws 服务的大型 Spring 应用程序。

服务是典型的Spring-WS代码:

package service;

@Endpoint
public class ServiceEndpoint {
    @Resource EntityDao entityDao;

    @PayloadRoot(localPart=...)
    @ResponsePayload
    public ResponseWrapperClass getServiceMethod(@RequestPayload RequestWrapperClass request) {
        return new ResponseProcessorClass(request).generateResponse();
    }
}

服务海量,类中使用@Resource注解注入的entityDao广泛。

因为我做的具体方法有点复杂,所以我把它封装在一个单独的类中的一个子包中。

ResponseProcessorClass 如下所示:

package service.business;
@Component
public class ResponseProcessorClass {
    @Resource EntityDao entityDao;

    public ResponseWrapperClass generateResponse() {
        entityDao.getSomeData(); //encapsulates hibernate logic -> Null Pointer Exception
    }
}

正如您在上面的 cmets 中看到的那样,在我的新类中使用 @Resource 注释时出现空指针异常。

我之前没有使用过这个注解,但是对于我从documentation 中理解的内容,应该推断并注入类型。我在任何 XML 文件中也找不到任何配置。

谁能告诉我为什么我会得到 NPE?

【问题讨论】:

  • Spring 托管 bean。 Spring 只能自动装配它管理的 bean。
  • 我明白这一点。事实是,这适用于现有的代码库。我只是从@Endpoint 类中获取逻辑并将其移至单独的包中。
  • 这是问题所在:return new ResponseProcessorClass(request).generateResponse();
  • 谢谢。但不明白为什么会出现这个问题,我应该怎么做。
  • 当您是创建对象的人时,您期望 Spring 注入一个 EntityDao bean。 Spring 只能注入它控制/管理的 bean。你能展示你完整的ResponseProcessorClass课程吗?

标签: java spring jakarta-ee dependency-injection spring-ws


【解决方案1】:

Spring 只能将 Spring 托管 bean 注入 Spring 托管 bean。因此,如果您自己创建对象,Spring 对此无能为力。这个

return new ResponseProcessorClass(request).generateResponse();

是问题所在。您期望 Spring 注入 you 创建的 ResponseProcessorClass 对象的字段。

尝试注入一个原型 bean,而不是自己创建它。这取决于您的 ResponseProcessorClass 课程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多