1

我“继承”了一个带有 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 注释时,我得到了一个空指针异常。

我以前没有使用过这个注解,但是根据我从文档中的理解,应该推断和注入类型。我也无法在任何 XML 文件中找到任何配置。

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

4

1 回答 1

1

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

return new ResponseProcessorClass(request).generateResponse();

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

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

于 2013-10-14T22:03:22.960 回答