1. 程式人生 > >Spring 無法注入靜態變數,直接在靜態方法中獲取bean

Spring 無法注入靜態變數,直接在靜態方法中獲取bean

模組中想把一個類寫成工具類,提供靜態方法呼叫。但是方法中要用到@autowire注入的dao類變數,它要能在靜態方法中使用的話本身就加上static,但是static變數是無法用@autowire注入的。

@Autowired
private AppConfMapper m;

public static Map getSysConf() {
    m.....;
}

換一種思路,為什麼在要外層注入,在方法裡面獲取m也可以啊。你可以用@autowire這種註解自動把物件例項注入進來,這些例項是維護在getApplicationContext中的。手動去這裡getBean出來就是了。

public static Map getSysConf() {

    AppConfMapper appConfMapper = (AppConfMapper) BeanHoldFactory.getApplicationContext().getBean("appConfMapper");
    List<Map> list = appConfMapper.getSysConf();
}
這裡BeanHoldFactory 實現了ApplicationContextAware,重寫了setApplicationContext方法,裡面存放了程式碼中所有使用註解(@Component,@Repository,@Service等)標註的類的例項,相當於放在spring容器中管理。