Multithreading SpringFrameWork注入的bean为空?

Multithreading SpringFrameWork注入的bean为空?,multithreading,spring,spring-mvc,null,javabeans,Multithreading,Spring,Spring Mvc,Null,Javabeans,我正在研究SpringFrameWork和MySQL 我做了一些测试,DB和框架之间的通信工作正常。 问题是,当我在扩展线程的类中使用注入bean时,不知何故,bean变为null。我不知道为什么 下面是创建线程扩展对象('iisdemon')的Spring控制器的一部分 下面是第三类的 public class IISDaemon extends Thread { private Logger log = Logger.getLogger(getClass()); @Inje

我正在研究SpringFrameWork和MySQL

我做了一些测试,DB和框架之间的通信工作正常。 问题是,当我在扩展线程的类中使用注入bean时,不知何故,bean变为null。我不知道为什么

下面是创建线程扩展对象('iisdemon')的Spring控制器的一部分

下面是第三类的

public class IISDaemon extends Thread {
    private Logger log = Logger.getLogger(getClass());

    @Inject 
    IISSVCImpl svc;

    @Override
    public void run() {
        log.info("Daemon starts.");
        ArrayList<IISVO> list = new ArrayList<IISVO>();
        try{
            log.info("svc bean : " + svc);
            list = (ArrayList<IISVO>)svc.jobList(1);
            for(IISVO vo : list){
                this.sleep(5000);
                log.info(vo);
            }
        }catch(Exception e){e.printStackTrace();}
    }   
};
public类iisdemon扩展线程{
私有记录器log=Logger.getLogger(getClass());
@注入
IISSVCImpl svc;
@凌驾
公开募捐{
log.info(“守护进程启动”);
ArrayList=新建ArrayList();
试一试{
log.info(“svcbean:+svc”);
list=(ArrayList)svc.jobList(1);
对于(IISVO vo:列表){
这个。睡眠(5000);
日志信息(vo);
}
}catch(异常e){e.printStackTrace();}
}   
};
如您所见,我在每个类中打印2个日志。 上一个是

INFO:org.owls.iis.IISMgrController-svcbean:org.owls.iis.svc。IISSVCImpl@4572

下面一个是

INFO:org.owls.iis.daemon.IISDaemon-svcbean:null


提前感谢您的建议:D

它没有被注入,因为
iisdemon
不是Spring管理的类。您正在控制器类中使用
new
操作符实例化它


也许您更愿意将
IISDaemon
注入控制器类,然后通过其构造函数将注入的值提供给
ISSDaemon

我已经重建了程序。 现在一切正常。 我记不清自己当时的处境,但尼古拉斯的回答可能是正确的。 也许我可以将bean转换为root-context.xml或@Component。
感谢您阅读此问题。

谢谢您的建议。但我希望在最终版本中采用的形式没有什么不同iisdemon'应立即启动,就像启动时一样。它需要访问数据库(这就是我在守护进程中注入服务类的原因)。因此,我在根上下文中添加了IISDaemon作为bean(如您的第一句话)。并且由于目的(如我添加的注释),我将init method=“start”。所以我的解决方案看起来像。但它仍然不起作用。谢谢,但你能提出其他建议吗D再次感谢
public class IISDaemon extends Thread {
    private Logger log = Logger.getLogger(getClass());

    @Inject 
    IISSVCImpl svc;

    @Override
    public void run() {
        log.info("Daemon starts.");
        ArrayList<IISVO> list = new ArrayList<IISVO>();
        try{
            log.info("svc bean : " + svc);
            list = (ArrayList<IISVO>)svc.jobList(1);
            for(IISVO vo : list){
                this.sleep(5000);
                log.info(vo);
            }
        }catch(Exception e){e.printStackTrace();}
    }   
};