SpringFrameWork注入的bean是null吗?

时间:2013-10-15 01:50:40

标签: multithreading spring spring-mvc null javabeans

我正在使用SpringFrameWork和MySQL。

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

下面是我的Spring控制器的一部分,它创建了Thread扩展对象('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

2 个答案:

答案 0 :(得分:0)

未注入,因为IISDaemon不是Spring托管类。您正在使用new运算符在控制器类中实例化它。

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

答案 1 :(得分:0)

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