Spring源码解析(十二) SpringMVC核心流程&面试题源码解析

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

猜你喜欢

转载自blog.csdn.net/caicongyang/article/details/123452187
今日推荐