关于在HandlerInterceptor里注入类

关于在HandlerInterceptor里注入类

我在开发中就遇到了这么一个问题,在进行Token验证时,我在HandlerInterceptor里注入了一个RedisTemplate,这是我自己配置的一个RedisTemplate,但当我想使用RedisTemplate中的haskey方法时,一直给我报空指针异常,我一开始以为参数没有传进去,然后打了几个断点调试了一下,发现了一个非常神奇的问题,我的RedisTemplate居然是null,这也就表示我没有将这个RedisTemplate注入到容器中,就导致我没有获得它的实例化对象,空指针异常就出现在这里。

一开始我以为是我自己配置了RedisTemplate的原因,因此我检查了很多遍,我的RedisTemplate是没有问题的,但就是一直注入不成功,我就非常疑惑了,于是我去网上求助,但一直得不到我想要的答案。

难道我这个问题就没人遇到过吗?

当然不是辣,经过我的不懈努力,终于让我发现了一丝蛛丝马迹,原来是SpringBoot加载的原因。

SpringBoot在启动初始化加载时,配置类(@Configuration)比普通的Bean是要先加载的,由于我的HandlerInterceptor被我加上了**@Configuration注解,我的HandlerInterceptor就成了一个配置类,这就导致我的HandlerInterceptor先加载,但我又在HandlerInterceptor里面注入了RedisTemplate这个普通的Bean,此时我的RedisTemplate**还没有被SpringBoot识别在容器中创建实例呀,所以不为空才怪了。所以SpringBoot注解要慎用呀

总结了一下,有两个解决方法

第一个解决方法就是,把**@Configuration注解换成@Component**,@Component是一个普通的组件,这样就跟你自己的类是同一等级加载的了,就不会有空指针的问题了。

第二个解决方法就是,就比如,我就是要使用**@Configuration**,就是要把他当成一个配置类,我们就需要手动注入Bean了

public class InterceptorConfig implements WebMvcConfigurer {

    @Bean
    public TokenInterceptor setBean2(){
        System.out.println("注入了handler");
        return new TokenInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(setBean2())
                .addPathPatterns("/**");
    }
}

以上就是我开发问题中遇到的坑,反正困了我多长一段时间的。因为我到最后也没想到用第一个方法,但也让我知道了第二种解决方法,保住了自己的倔强,哈哈哈哈哈哈。。。。。。。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值