问题:@Component组件内使用@Resource注解注入失败,使用时报错空指针异常
原因:
spring加载组件的顺序不同导致,注入@Resource对象时spring容器还没有创建这个对象。
解决方法
获取applicationContent,通过getBean方法手动获取容器池中的对象
SpringContextUtil
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext=applicationContext;
}
public static <T> T getBean(Class<T> clazz){
return applicationContext.getBean(clazz);
}
}
使用
//注入失败,手动获取
if(messageDao==null){
messageDao= SpringContextUtil.getBean(MessageDao.class);
}