我在系统启动时,想通过ServletContextListener加载数据库的常用数据,以下是部分代码
public class initSystemListener implements ServletContextListener
{
private ServletContext context = null;
public void contextDestroyed(ServletContextEvent arg0)
{
// TODO Auto-generated method stub }
public void contextInitialized(ServletContextEvent arg0)
{
context = arg0.getServletContext();
Configer.getInstance("systemConfig").loadSysConfig();
Configer.virtualRoot = context.getInitParameter("virtualRoot");
}
}
这里Configer是一个普通bean,我想在这个bean中注入一个service,见下
public class Configer
{
public static String virtualRoot;
private ICommon sysConfigService;
public void setSysConfigService(ICommon sysConfigService)
{
this.sysConfigService = sysConfigService;
}
我也作了相应配置
<bean id="configer" class="com.family168.init.Configer" >
<property name="sysConfigService">
  <ref bean="sysConfigService" />
</property>
</bean>
可是通过断点跟踪发现,根本没有执行setSysConfigService方法,sysConfigService 一直为null,我这里哪里发生了问题……
 

解决方案 »

  1.   

    <ref bean="sysConfigService" />
    sysConfigService配置了么?是不是这里的sysConfigService就是空的?
      

  2.   

    既然有spring,为什么不extends ContextLoaderListener呢
      

  3.   

    这个另外考虑,对1楼,因为这个是服务启动时加载数据,所以没有涉及到action因而不需要在action中注入,对2楼,sysConfigService我做了配置.
    spring注入,为什么对一个普通bean就不行呢?请高手指点
      

  4.   

    我做了如下修改,在web.xml中增加了
    <listener> 
        <listener-class> 
            org.springframework.web.context.ContextLoaderListener 
        </listener-class> 
    </listener>
    为的是优先加载applicationContext.xml,然后我在Configer类的this.sysConfigService = sysConfigService;处设置了断点,经过跟踪是可以到达这里的,并且,有值,输出为
    com.family168.service.impl.EpareSysConfigImpl@196a21e
    可是继续向下跟踪,当执行initSystemListener 类中Configer.getInstance("systemConfig").loadSysConfig();方法时,因为该方法调用了sysConfigService,结果此时该值又
    变为了null!!!!
    头大啊,怎么回事啊?????已经付好的值哪里去了啊!!!!
      

  5.   

    我也遇到了这个问题..服务器启动时用servlet启动一个线程..里面有需要注入的对象...但一直为null..不知道楼主解决了这个问题了没有啊?