2

我正在研究 SpringFrameWork 和 MySQL。

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

下面是我的 Spring 控制器的一部分,它创建线程扩展对象('IISDaemon')。

@RequestMapping("/list")
public ModelAndView list(
        @RequestParam(value="page_no", defaultValue="1") Integer page_no) 
        throws Exception{
    log.info("Manager called Web page. page no : " + page_no);
    ModelAndView mav = new ModelAndView();

    //test
        log.info("svc bean : " + svc);
        IISDaemon daemon = new IISDaemon();
        daemon.start();

    //


    mav.setViewName("/iis/list");
    mav.addObject("list", svc.list(page_no));
    return mav;
}

下面是类 IISDaemon。

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();}
    }   
};

如您所见,我在每个类中打印 2 个日志。上一个是

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

下一个是

" INFO : org.owls.iis.daemon.IISDaemon - svc bean : null"

提前感谢您的建议:D

4

2 回答 2

0

我已经重建了程序。现在它工作正常。我不记得确切的情况,但可能尼古拉斯的回答是正确的。也许我可能会错过抵抗 bean 到 root-context.xml 或 @Component。感谢您阅读这个问题。

于 2013-11-25T08:19:26.747 回答
0

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

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

于 2013-10-15T01:56:25.927 回答