@Resource注释产生NPE

时间:2013-10-14 21:45:39

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

我继承了一个带有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
    }
}

正如您在上面的评论中所看到的,在我的新班级中使用@Resource注释时,我得到一个Null Pointer Exception。

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

有人能告诉我为什么要获得NPE?

1 个答案:

答案 0 :(得分:1)

Spring只能将Spring托管bean注入Spring托管bean。因此,如果您自己创建对象,Spring无法对此做任何事情。这个

return new ResponseProcessorClass(request).generateResponse();

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

尝试注入原型bean而不是自己创建它。这取决于您的ResponseProcessorClass班级。