2013-10-15 27 views
2

我正在使用SpringFrameWork和MySQL。SpringFrameWork注入的bean是否爲空?

我做了一些測試和DB和框架之間的溝通工作正常。 問題是當我使用擴展線程的類中的Injected bean時,某種方式bean變爲null。我不知道爲什麼。

下面是我的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; 
} 

而下面是Class 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 : [email protected]」。

和較低的一個是

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

提前謝謝你的建議:d

回答

0

它沒有注入,因爲IISDaemon不是Spring管理類。您正在使用new運算符在您的控制器類中實例化它。

也許您寧願將IISDaemon注入您的控制器類,然後通過其構造函數將注入的值提供給您的ISSDaemon

+0

感謝您的諮詢。但是我想要的最終版本中的表格有點不同。 'IISDaemon'應該在WAS啓動時立即啓動。它需要訪問數據庫(這就是爲什麼我在守護進程中注入服務類)。 –

+0

所以我在根上下文中添加了IISDaemon作爲一個bean(就像你的第一句話)。並且由於目的(我添加了評論),我把init-method =「start」。所以我的解決方案看起來像。它仍然不起作用。謝謝,但你能提出其他想法嗎? :D再次感謝 –

+0

哦。錯誤消息仍顯示IISSvcImpl bean爲'null'。 –

0

我已經重建了程序。 現在它工作正常。 我記不清楚自己身處何種情況,但可能尼古拉斯的答案是正確的。 也許我可能會錯過抵抗bean到root-context.xml或@Component。 感謝您閱讀此問題。