SpringBoot拦截器或SpringMVC拦截器,@Autowired自动注入为null问题

导读:本篇文章讲解 SpringBoot拦截器或SpringMVC拦截器,@Autowired自动注入为null问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

最近使用SpringBoot的自定义拦截器,在拦截器中注入了一个RedisService,准备下面作相应操作,拦截器代码:

public class WebAdminInterceptor implements HandlerInterceptor {
    @Autowired
    private RedisService redisService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
     
    }
    
    ...
}

配置信息代码:

@Configuration
public class WebAdminInterceptorConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new WebAdminInterceptor()).addPathPatterns("/**").excludePathPatterns("/static");
    }
}

看起来没有问题,但debug发现拦截器中注入的redisService为null。

原因是这个拦截应该先托管给spring容器进行实例化,然后在添加拦截器的时候获取这个bean,不能直接new,new的话没有就是没有交给spring容器管理,自然里面的@Autowired也不会被Spring处理,自然没有效果

解决

解决方法就是让bean交给Spring容器实例化,将配置信息修改为如下:

@Configuration
public class WebAdminInterceptorConfig implements WebMvcConfigurer {

    @Bean
    WebAdminInterceptor webAdminInterceptor(){
        return new WebAdminInterceptor();
    }

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

重新运行即可注入成功。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/15224.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!