Spring 无法注入静态变量,直接在静态方法中获取bean

来源:互联网 发布:手机淘宝充值中心没有 编辑:程序博客网 时间:2024/06/11 19:45

模块中想把一个类写成工具类,提供静态方法调用。但是方法中要用到@autowire注入的dao类变量,它要能在静态方法中使用的话本身就加上static,但是static变量是无法用@autowire注入的。

@Autowiredprivate 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容器中管理。

2 0