我正在研究 SpringFrameWork 和 MySQL。
我做了一些测试,数据库和框架之间的通信工作正常。
问题是当我在扩展线程的类中使用注入(inject) bean 时,不知何故 bean 变为空。我不知道为什么。
下面是我的 Spring Controller 的一部分,它创建线程扩展对象('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
最佳答案
未注入(inject)是因为 IISDaemon
不是 Spring 托管类。您在 Controller 类中使用 new
实例化它运算符(operator)。
也许您宁愿注入(inject) IISDaemon
进入您的 Controller 类,然后将注入(inject)的值提供给您的 ISSDaemon
通过它的构造函数。
关于multithreading - SpringFrameWork 注入(inject)的 bean 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372072/