美文网首页Springboot
记录解决一个springboot拦截器无法注入redisTemp

记录解决一个springboot拦截器无法注入redisTemp

作者: 乐乐J | 来源:发表于2018-11-12 11:48 被阅读187次

    笔者做登录功能时,想使用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())....
    }
    

    到此问题即解决。

    相关文章

      网友评论

        本文标题:记录解决一个springboot拦截器无法注入redisTemp

        本文链接:https://www.haomeiwen.com/subject/nebqfqtx.html