对handlerexecutionchain类的深入理解
HandlerExecutionChain类比较简单,好理解。
/* *处理器执行链由处理器对象和拦截器组成。 */ publicclassHandlerExecutionChain{
下面是类的部分属性。
privatefinalObjecthandler;//处理器对象。 privateHandlerInterceptor[]interceptors;//拦截器数组 privateListinterceptorList;//拦截器列表
/** *ApplypreHandlemethodsofregisteredinterceptors. *@return{@codetrue}iftheexecutionchainshouldproceedwiththe *nextinterceptororthehandleritself.Else,DispatcherServletassumes *thatthisinterceptorhasalreadydealtwiththeresponseitself. *执行已经注册的拦截的preHandle()方法。如果返回true,则执行链可以执行下一个拦截器的preHandle()方法或handler自身。 *否则, */ booleanapplyPreHandle(HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ HandlerInterceptor[]interceptors=getInterceptors(); if(!ObjectUtils.isEmpty(interceptors)){ for(inti=0;i /* *执行已经注册的拦截器postHandle()方法。 */ voidapplyPostHandle(HttpServletRequestrequest,HttpServletResponseresponse,ModelAndViewmv)throwsException{ HandlerInterceptor[]interceptors=getInterceptors(); if(!ObjectUtils.isEmpty(interceptors)){ for(inti=interceptors.length-1;i>=0;i--){ HandlerInterceptorinterceptor=interceptors[i]; interceptor.postHandle(request,response,this.handler,mv); } } }/** *这个方法只会执行preHandle()方法已经成功执行并且返回true的拦截器中的postHandle()方法。 */ voidtriggerAfterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Exceptionex) throwsException{ HandlerInterceptor[]interceptors=getInterceptors(); if(!ObjectUtils.isEmpty(interceptors)){ for(inti=this.interceptorIndex;i>=0;i--){ HandlerInterceptorinterceptor=interceptors[i]; try{ interceptor.afterCompletion(request,response,this.handler,ex); } catch(Throwableex2){ logger.error("HandlerInterceptor.afterCompletionthrewexception",ex2); } } } }以上这篇对handlerexecutionchain类的深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。