最近使用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