记录解决一个springboot拦截器无法注入redisTemplate操作工具类问题

笔者做登录功能时,想使用redis缓存下前端用户的登录状态,同时使用redis超时机制为登录状态做超时。直接引入的拦截器控制接口的访问。于是在拦截器内就有了注入业务类的问题。
通常我们定义拦截器都是使用java代码配置,定义一个config类继承一个基类。如下所示:

public class WebMvcConfig extends WebMvcConfigurerAdapter{
}

这个类中一般包含重写一个addInter方法,如下所示:

@Override
    public void addInterceptors(InterceptorRegistry registry){
         //无关代码略去
        registry.addInterceptor(new Interceptor())....
}

new Interceptor() 即是我们定义的拦截器。此时若是在Interceptor类内使用@Autowired注解引入bean实例,必然导致无法注入,实例为null的情况。原因笔者的分析是因为:
在addInterceptors方法中添加拦截器时,是new的一个拦截器。而并不是引入springBean容器初始化时,已经初始化好了的bean实例,并不是同一个对象,故而访问时肯定是无法引入Interceptor类里面引入的bean实例。解决办法也很简单。既然无法引入默认注入的Bean,那么我们就自己定义一个Bean,然后在拦截器添加方法内引入这个bean就好了。具体办法是:

第一步在WebMvcConfig类下定义一个bean,如下:
 @Bean
    public Interceptor Interceptor(){
        return new Interceptor();
    }
第二步在添加拦截器时,直接使用这个bean
@Override
    public void addInterceptors(InterceptorRegistry registry){
         //无关代码略去
        registry.addInterceptor(Interceptor())....
}

到此问题即解决。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 12,330评论 6 86
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,753评论 2 22
  • 1.1 Spring IoC容器和bean简介 本章介绍了Spring Framework实现的控制反转(IoC)...
    起名真是难阅读 2,621评论 0 8
  • 逆行于世间,有点迷茫,有点渴望 迷茫着前路飘渺 渴望着出人头地 一路行来,困难一次比一次艰苦 有时候更像大浪,一下...
    西洲兮矣阅读 229评论 0 1