我继承了一个带有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?
答案 0 :(得分:1)
Spring只能将Spring托管bean注入Spring托管bean。因此,如果您自己创建对象,Spring无法对此做任何事情。这个
return new ResponseProcessorClass(request).generateResponse();
是问题所在。您期望Spring注入您创建的ResponseProcessorClass
对象的字段。
尝试注入原型bean而不是自己创建它。这取决于您的ResponseProcessorClass
班级。