1.概念模型HandlerExecutionChain
HandlerExecutionChain可以被想象为一个容器,它包含一个Handler,和一组特定顺序的HandlerInterceptor。
- Handler就是一个被设计为处理目标请求,输出响应数据的处理逻辑
- 而一个HandlerInterceptor则是类似于AOP中切面的一种概念逻辑。在Spring MVC初始化过程中,符合某种特征的HandlerInterceptor会按特定顺序包裹到某些Handler外面,形成一个个HandlerExecutionChain,待DispatcherServlet用于请求处理
小结
- HandlerExecutionChain所持有的对象
- Handler——处理请求的目标Handler
- HandlerInterceptor——0个或多个Handler处理请求的前置/后置/完成时拦截处理器
- HandlerExecutionChain所提供的重要方法
- applyPreHandle——前置拦截处理器
- applyPostHandle——后置拦截处理器
- triggerAfterCompletion——完成时拦截处理器
2.HandlerMapping概念
HandlerMapping的作用是根据当前请求找到对应的Handler,并将Handler(执行程序)与一堆的HandlerInteceptor(拦截器)封装到HnadlerExecutionChain对象中,在HandlerMapping接口的内部只有一个方法:
HandlerEecutionChain getHandler(HttpSerletRequest request);
HandlerMapping是由DispatcherServlet调用,DispatcherServlet会从容器中取出所有HandlerMapping实例并遍历,让HandlerMapping实例根据自己实现类的方式去尝试查找Handler
3.HandlerAdapter概念
HandlerAdapter的作用:因为Spring MVC中的Handler可以有多种实现形式,但是Servlet需要处理方法的结构却是固定的,都是以request和response作为方法入参,那么如何让固定参数的Servlet处理方法调用灵活的Handler来进行处理呢,这就需要HandlerAdapter来做适配
需要注意的是:Spring MVC的Handler(Controller接口,HttpRequestHandler,@RequestMapping,Servlet)有多种表现形式,不同的Handler,处理请求的方式是不一样的,注解@RequestMapping方法使用的是用方法处理请求,而实现Controller接口和HttpRequestHandler接口方式使用的是一个类,而适配器模式就能模糊掉具体的实现,从而就能提供统一访问接口,所以就需要用到适配器了