2013-10-14 518 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類。