小编给大家分享一下SpringBoot之拦截器注入Bean的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
由于业务需要,需要在拦截器中操作Redis缓存,按照 controller,service层配置发现无法注入,一直报空指针异常。
解决方案
@Configuration public class MyWebAppConfigurer extends WebMvcConfigurerAdapter { /** * 将自定义拦截器作为Bean写入配置 * @return */ @Bean public SysInterceptor sysInterceptor() { return new SysInterceptor(); } /** * 对拦截器注册 */ @Override public void addInterceptors(InterceptorRegistry registry) { String[] patterns = new String[] {"/swagger-resources/**"}; registry.addInterceptor(sysInterceptor()) .addPathPatterns("/**") .excludePathPatterns(patterns); super.addInterceptors(registry); } }
拦截器:
public class SysInterceptor implements HandlerInterceptor { private static final Logger logger = LoggerFactory.getLogger(SysInterceptor.class); @Autowired private RedisTemplate<String, String> redisTemplate; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //业务逻辑 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
查询原因
拦截器执行在Bean初始化之前导致这个问题的。在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->filter-->servlet; 而拦截器是在Spring MVC中配置的,如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param-->listener-->filter-->servlet-->interceptor,为什么拦截器是在servlet执行之后,因为拦截器本身就是在servlet内部的。
概念
servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
filter:filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
listener:监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据 其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执 行代码的功能组件。
interceptor:拦截器是对过滤器更加细化的应用,他不仅可以应用在service方法前后还可以应用到其他方法的前后拦截器。
以上是SpringBoot之拦截器注入Bean的示例的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。