前言: 线程为安全是会防止注入的 。当我在开辟线程写定时器准备定时执行修改操作时,发现使用spring住的类都是null,就是说无法获取到spring中的bean。
所以问题就来了 这个要怎么解决呢 解决方法如下:
这时我们就要用到ApplicationContextAware接口 。
因为在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能。为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口
自定义代码
public class AllBean implements ApplicationContextAware
{
private static ApplicationContext context = null;
@SuppressWarnings("static-access")
@Override
public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
this.context=applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanName){
return (T) context.getBean(beanName);
}
public static String getMessage(String key){
return context.getMessage(key, null, Locale.getDefault());
}
}
我们还需要在applicationContext.xml中声明AllBean的bean
<bean id="allBean" class="com.cn.XX.AllBean"></bean>
最后我们只需要通过实体类的getBean方法 获取想要获取的类就OK了
OrderDao orderDao = (OrderDao)AllBean.getBean("orderDao");
如有不懂加微信询问哦 AiMyHear