1、SpringMVC执行流程图
249993-20161212142542042-2117679195.jpg

用户发送请求至前端控制器DispatcherServlet。
DispatcherServlet收到请求调用HandlerMapping处理器映射器。
处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
DispatcherServlet调用HandlerAdapter处理器适配器。
HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
Controller执行完成返回ModelAndView。
HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
ViewReslover解析后返回具体View。
DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
DispatcherServlet响应用户。
2、源码解读















DispatcherServlet有List<HandlerAdapter> handlerAdapters List<HandlerMapping> handlerMappings属性。首先遍历handlerMappings集合通过HttpServletRequest匹配获取到对应的HandlerExecutionChain对象,最后通过HandlerExecutionChain获取HandlerMethod对象(最难理解的Object),遍历handlerAdapters,通过support(),取到对应的HandlerAdapter对象。执行HandlerExecutionChain中的所有的HandlerInterceptor。然后再执行HandlerAdapter的handle()。handle()会执行AbstractHandlerMethodAdapter的handleInternal()方法。然后会执行RequestMappingHandlerAdapter的handleInternal(),invokeHandlerMethod(),执行createInvocableHandlerMethod(),执行ServletInvocableHandlerMethod的invokeAndHandle(),执行invokeForRequest(),InvocableHandlerMethod的invokeForRequest(),doInvoke(),method.invoke(this.getBean(), args)通过反射执行Controller方法。
3、AOP的执行顺序
Spring4
正常:
1、环绕通知前
2、@Before通知
3、程序逻辑
4、环绕通知后
5、@After通知
6、@AfterReturning通知
异常:
1、环绕通知前
2、@Before通知
3、@After通知
4、@AfterThrowing异常通知
Spring5
正常:
1、环绕通知前
2、@Before通知
3、程序逻辑
4、@AfterReturning通知
5、@After通知
6、环绕通知后
异常:
1、环绕通知前
2、@Before通知
3、@AfterThrowing异常通知
4、@After通知
4、过滤器拦截器执行顺序

5、拦截器和过滤器的区别
- 过滤器是servlet中的对象,拦截器是框架中的对象。
- 过滤器实现Filter接口的对象,拦截器是实现HandlerInterceptor。
- 过滤器是用来设置request,response的参数,属性的,侧重对数据过滤的。
拦截器是用来验证请求的,能截断请求。 - 过滤器是在拦截器之前先执行的。
- 过滤器是Servlet容器创建的对象,
拦截器是springmvc容器中创建的对象。 - 过滤器可以处理jsp,js,html等等,
拦截器是侧重拦截对Controller的对象。如果你的请求不能被DispatcherServlet接收,这个请求不会执行拦截器内容。 - 拦截器拦截普通类方法执行,过滤器过滤servlet请求响应。