2015-11-17 147 views
0

我在RMI服務中的@autowired對象上得到一個NULL指針異常。 我已經創建了一個簡單的(我認爲)服務,通過RMI從客戶端調用。該代碼是作爲spring rmi @autowired return null

package com.edvs.service; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import com.edvs.dao.HostStatusDao; 

@Controller 
public class HeartbeatImpl implements Heartbeat { 

    private static final long serialVersionUID = 7502560843009449650L; 

    @Autowired 
    private HostStatusDao hs; 

    @Override 
    public int update(String hostSequenceNumber) { 
    int cnt = hs.update(hostSequenceNumber); 
    return cnt; 
    } 

}//End of file HeartbeatImpl.java. 

心跳-servlet.xml中的代碼如下:

<bean id="heartbeatBean" class="com.edvs.service.HeartbeatImpl"> 
    <!-- Nothing here for now. --> 
</bean> 

<bean class="org.springframework.remoting.rmi.RmiServiceExporter"> 
<!-- does not necessarily have to be the same name as the bean to be exported --> 
<property name="serviceName" value="Heartbeat"/> 
<property name="service" ref="heartbeatBean"/> 
<property name="serviceInterface" value="com.edvs.service.Heartbeat"/> 
<!-- defaults to 1099 --> 
<property name="registryPort" value="1199"/> 
</bean> 

指定組件掃描我WebConfiguration文件如下:

@Configuration 
@EnableWebMvc 
@EnableTransactionManagement 
@ComponentScan({ "com.edvs.controller","com.edvs.service" }) 
public class WebConfiguration extends WebMvcConfigurerAdapter { 

我HeartbeatImpl.java位於com.edvs.service包中,因此應該掃描它,並且應該實例化@autowired HostStatusDao,但它不是。屬性hs是NULL,它產生NULL異常。

我在這個系統中有許多控制器使用完全相同的@Autowired技術,他們工作正常。對象被實例化。由於heartbeat-servlet.xml文件中的Bean定義,我懷疑這個類是失敗的。我在這裏真的很難解決這個問題。我必須錯過阻止捕獲@Autowired的掃描器才能工作的內容。任何幫助將不勝感激。

回答

0

對不起,如果我浪費了任何人的時間,但我想我在偉大的雲中找到了答案。我像這樣添加了接口ApplicationContextAware。

public class HeartbeatImpl implements Heartbeat, ApplicationContextAware { 

這需要方法setApplicationContext。在該方法中,我實例化屬性hs。

@Override 
public void setApplicationContext(ApplicationContext ctx) 
    throws BeansException { 
    hs = (HostStatusDao) ctx.getBean("HostStatusDao"); 

} 

我希望這可以幫助別人,因爲它花了我整整一天的時間才弄清楚。