1. SpringMVC的核心流程
上图的源码PlantUml code
@startuml
DispatcherServlet -> HandlerMapping : org.springframework.web.servlet.DispatcherServlet#getHandler
HandlerMapping -> DispatcherServlet: HandlerExecutionChain
DispatcherServlet -> HandlerAdapter : org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter
HandlerAdapter -> DispatcherServlet: HandlerAdapter
Handler -> HandlerInterceptor : preHandle
DispatcherServlet -> Handler : org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest
Handler -> DispatcherServlet : ModelAndView
Handler -> HandlerInterceptor: postHandle
DispatcherServlet -> ViewReslove: org.springframework.web.servlet.DispatcherServlet#resolveViewName
DispatcherServlet -> view : render
Handler -> HandlerInterceptor : org.springframework.web.servlet.HandlerExecutionChain#triggerAfterCompletion
@enduml
默认的一些处理器:
2. HandlerMapping
requestMappingHandlerMapping
beanNameHandlerMapping
routerFunctionMapping
3.HandlerAdapter
RequestMappingHandlerAdapter
HandlerFunctionAdapter
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
4.ViewReslove
ViewResloverComposite
InternalResourceViewReslover
5.SpringMVC面试题拓展
1. 上面说的返回ModelAndView 那么 @ResponseBody 是如何解析的
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite#handleReturnValue
2. 如果一个请求被封装在jar钟,你该如何快速定位到在哪个controller
此方法不会,请继续调试上面的流程;
我的其他spring源码解析文章: https://blog.csdn.net/caicongyang/category_2139981.html?spm=1001.2014.3001.5482