本文主要是介绍HandlerInterceptor拦截器配置、SPI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http请求在handler中的执行顺序:
前端发送请求---->preHandler---->afterConcurrentHandlingStarted----->Controller----->postHandle---->afterCompletion---->返回请求
HandlerInterceptorAdapter一般做一些登陆拦截。
package org.springframework.web.servlet.handler;
public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor {// 默认构造函数public HandlerInterceptorAdapter() {}/** 预处理回调⽅法,实现处理器的预处理(例如登录校验) 第三个参数为响应的处理器,⼀般是⾃定义的Controller* 返回值:true 表示继续流程,如调⽤下⼀个拦截器或者是处理器;false表示流程中断,不会再调⽤其他的响应器 * 或者处理器*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}/** 后处理回调⽅法,实现处理器的后处理(但是在渲染视图之前),此时我们可以通过ModelAndView对模型数据进⾏* 处理或者对视图进⾏处理。*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throwsException {}/** 整个请求处理完毕回调⽅法,即在视图渲染完毕时回调,⽐如性能监控中我们可以在此记录结束时间并输出消耗时间* 还可以进⾏⼀些资源的清理,类似于try...catch...finally中的finally。*/public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, @Nullable Exception ex) throwsException {}/*** 不是HandlerInterceptor的接⼝实现,是AsyncHandlerInterceptor的,AsyncHandlerInterceptor实现了HandlerInterceptor在有异步请求时触发,在preHandle返回true之后才执⾏这⾥,这⾥执⾏完成之后会触发postHandle和afterCompletion*/public void afterConcurrentHandlingStarted(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {}
}
SPI全称Service Provider Interface,服务发现机制,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。 SPI的作用就是为这些被扩展的API寻找服务实现。
这种动态装配有什么用呢?
可以把CatService理解为JDBC的接口,JDBC是Java为连接数据库定义的规范。
而WriteCatService和BlackCatService分别代表mysql连接和Oracle连接的实现类。
在导包的时候会导入mysql的驱动类:
看一下mysql的驱动类中都有些什么:
在这个包里面实现了JDBC的一些接口。
示例:
这篇关于HandlerInterceptor拦截器配置、SPI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!