版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wyx_wx/article/details/89015651
问题描述:
需要在拦截器中用 Redis 缓存一些数据,但是不论是用 @Resource 还是 @Autowired 注入,都会报空指针异常
如图:调试时显示 RedisUtil 为空
出现这个问题的原因是因为拦截器作用在属性自动注入开始之前,其运行时,内部属性还未开始注入,所以为空
于是在百度上找答案,找到的大部分答案如下:
写一个配置类来注册拦截器,并在其中将拦截器作为 Bean 写入配置,但是我试过之后依旧没有解决问题
于是用了另外一个办法
获取WebApplicationContext, 根据 WebApplicationContext 获取相应的bean.
private <T> T getRedisUtil(Class<T> clazz, HttpServletRequest request){
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
return applicationContext.getBean(clazz);
}
在程序中直接调用该方法来获取 Bean:
此时再进行调用则成功