我正在使用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
答案 0 :(得分:0)
未注入,因为IISDaemon
不是Spring托管类。您正在使用new
运算符在控制器类中实例化它。
也许您宁愿将IISDaemon
注入控制器类,然后通过其构造函数向ISSDaemon
提供注入的值。
答案 1 :(得分:0)
我重建了这个程序。 它现在工作正常。 我不记得到底是什么情况,但尼古拉斯的回答可能是正确的。 也许我可以错过抵抗bean到root-context.xml或@Component。 感谢您阅读此问题。