Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring rmi@autowired返回空值_Spring_Servlets_Rmi_Autowired - Fatal编程技术网

spring rmi@autowired返回空值

spring rmi@autowired返回空值,spring,servlets,rmi,autowired,Spring,Servlets,Rmi,Autowired,我在RMI服务中的@autowired对象上收到一个空指针异常。 我已经创建了一个简单的(我认为)服务,可以通过RMI从客户端调用。代码如下所示 package com.edvs.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import com.edvs.dao.HostStatusDao; @

我在RMI服务中的@autowired对象上收到一个空指针异常。 我已经创建了一个简单的(我认为)服务,可以通过RMI从客户端调用。代码如下所示

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.
heartbeat-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>
My HeartbeatImpl.java在com.edvs.service包中,因此应该对其进行扫描,并且应该实例化@autowired HostStatusDao,但它不是。属性hs为NULL,这将生成NULL异常


在这个系统中,我有许多控制器使用完全相同的@Autowired技术,它们工作得很好。对象被实例化。我怀疑这个类失败是因为heartbeat-servlet.xml文件中的Bean定义。我在这里解决这个问题真是不知所措。我一定是错过了什么东西,阻止了捕获@Autowired的扫描仪工作。任何帮助都将不胜感激。

如果我浪费了任何人的时间,我很抱歉,但我想我在云端找到了答案。我像这样添加了接口ApplicationContextAware

public class HeartbeatImpl implements Heartbeat, ApplicationContextAware {
这需要方法setApplicationContext。在该方法中,我实例化了我的属性hs

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

}
我希望这能帮助其他人,因为我花了一整天的时间才弄明白这一点

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

}