架构师进阶之路——3、Spring MVC 源码深度剖析(二)
·
目录
1、前端控制器 DispatcherServlet 继承结构
一、SpringMVC处理请求源码分析
1、前端控制器 DispatcherServlet 继承结构

2、SpringMVC处理请求流程
1) 调用getHandler()获取到能够处理当前请求的执行链 HandlerExecutionChain(Handler+拦截器)

2)调用getHandlerAdapter();获取能够执行1)中Handler的适配器

3)适配器调用Handler执行ha.handle(总会返回一个ModelAndView对象)

调用processDispatchResult()方法完成视图渲染跳转

3、核心方法深度剖析
1)getHandler方法剖析
遍历两个HandlerMapping,试图获取能够处理当前请求的执行链

2)getHandlerAdapter方法剖析
遍历各个HandlerAdapter,看哪个Adapter支持处理当前Handler

3)ha.handle方法剖析
进入




4)processDispatchResult方法剖析

二、SpringMVC九大组件初始化
1、九大组件
在DispatcherServlet中定义了九个属性,每一个属性都对应一种组件
/** MultipartResolver used by this servlet. */
// 多部件解析器
@Nullable
private MultipartResolver multipartResolver;
/** LocaleResolver used by this servlet. */
// 区域化 国际化解析器
@Nullable
private LocaleResolver localeResolver;
/** ThemeResolver used by this servlet. */
// 主题解析器
@Nullable
private ThemeResolver themeResolver;
/** List of HandlerMappings used by this servlet. */
// 处理器映射器组件
@Nullable
private List<HandlerMapping> handlerMappings;
/** List of HandlerAdapters used by this servlet. */
// 处理器适配器组件
@Nullable
private List<HandlerAdapter> handlerAdapters;
/** List of HandlerExceptionResolvers used by this servlet. */
// 异常解析器组件
@Nullable
private List<HandlerExceptionResolver> handlerExceptionResolvers;
/** RequestToViewNameTranslator used by this servlet. */
// 默认视图名转换器组件
@Nullable
private RequestToViewNameTranslator viewNameTranslator;
/** FlashMapManager used by this servlet. */
// flash属性管理组件
@Nullable
private FlashMapManager flashMapManager;
/** List of ViewResolvers used by this servlet. */
// 视图解析器
@Nullable
private List<ViewResolver> viewResolvers;
2、九大组件的初始化时机
DispatcherServlet中的onRefresh(),该方法中初始化了九大组件

观察其中的一个组件initHandlerMappings(context)

3、Spring与Spring MVC 初始化的关联性


在spring启动的时候发布时间监听,通过监听来出发dispatcherServlet的onReFresh(),从而加载spring mvc的相关组件

更多推荐



所有评论(0)