2013-10-14 233 views
1

我“继承了”一个带有spring-ws服务的大型Spring应用程序。@产生NPE的资源注释

的服务是典型的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(); 
    } 
} 

的服务是巨大的,而entityDao注射@Resource注解是在类被广泛使用。

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

的ResponseProcessorClass看起来是这样的:

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

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

你可以通过我的上述评论看,我在我的新类使用@Resource注解的时候得到一个空指针异常。

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

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

+0

Spring管理的bean。 Spring只能自动调用它管理的bean。 –

+0

我明白这一点。事实是,这在现有的代码库中起作用。我只是从@Endpoint类中取出逻辑并将其移到单独的包中。 – Pablo

+0

这是问题:'返回新的ResponseProcessorClass(request).generateResponse();' –

回答

1

Spring只能将Spring管理的bean注入到Spring管理的bean中。因此,如果你自己创建对象,Spring不能对它做任何事情。这

return new ResponseProcessorClass(request).generateResponse(); 

是问题所在。您正在等待Spring注入ResponseProcessorClass对象的域创建。

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