spring mvc 源码解析
2022-08-03 09:30:39 0 举报
AI智能生成
登录查看完整内容
spring mvc 源码解析,关注我,后续有更多的源码解析
作者其他创作
大纲/内容
1. 扩展点 HttpMessageConverter 消息转换器, 如 fastjson
2. 扩展点 ContentNegotiationConfigurer 内容协商
3. InternalResourceViewResolver 视图解析器,解析 jsp 页面
4. ContentNegotiatingViewResolver 视图解析的入口类
5. LocaleResolver 国际化支持
6. FormatterRegistry 前端参数转化
7. RequestContextFilter 上下文过滤器
1. 默认的 WebMvcConfigurer 实现, WebMvcAutoConfigurationAdapter
1. RequestMappingHandlerAdapter @RequestMapping 处理器适配器
2. RequestMappingHandlerMapping @RequestMapping 处理器映射器
3. ResourceHandlerRegistry 静态资源处理器,映射静态的
4. WelcomePageHandlerMapping 首页处理器
5. mvcValidator 请求参数校验器
6. ExceptionHandlerExceptionResolver 异常处理器
2. 默认的 webmvc 设置, EnableWebMvcConfiguration
1. WebMvcAutoConfiguration
2. TomcatServletWebServerFactoryCustomizer 容器自定义类,可以修改端口
1. StandardServletMultipartResolver 文件上传
3. MultipartAutoConfiguration
4. WebMvcProperties mvc 属性配置类
1. DispatcherServlet
5. DispatcherServletAutoConfiguration 请求配置类
6. ServletWebServerFactoryAutoConfiguration
1. 核心类
1. logRequest(request); 记录请求,必须要设置为 trace
2. includeRequest 请求的支持(可以忽略)
3. 设置 request 的 attribute
1. WebAsyncUtils.getAsyncManager(request)
2. checkMultipart(request) 检查是否为 multipart 类型
1. 遍历所有的 handlerMappings,获取请求对应的 HandlerExecutionChain
1. RequestMappingHandlerMapping
2. BeanNameUrlHandlerMapping
3. RouterFunctionMapping, 这个是 reactive 的
HandlerMapping 重要的类
3. getHandler(processedRequest)
1. 遍历所有的 handlerAdapters, 获取 handle 对应的 handleAdapter
1. SimpleControllerHandlerAdapter
2. RequestMappingHandlerAdapter
3. HandlerFunction
2. HandlerAdapter 重要的类
4. HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
font color=\"#000000\
2. ModelFactory, 处理@ModelAttribute
重要类 RequestResponseBodyMethodProcessor
1. 设置 HandlerMethodArgumentResolver 参数解析器
1. writeWithMessageConverters
重要类 ResponseBodyAdvice
1. handleReturnValue
2. 设置 HandlerMethodReturnValueHandler 返回值处理器
3. ServletInvocableHandlerMethod, 真正处理逻辑的对象
4. ModelAndViewContainer 包装 ModelAndView
2. 如果 mavContainer.setRequestHandled(true) 表示 modelAndView 不用处理了
3. this.returnValueHandlers.handleReturnValue()
font color=\"#ff0000\
2. 缓存的处理
1. exception 是否为 ModelAndViewDefiningException, 取出 modelAndView 对象
重要的 HandlerExceptionResolver: ExceptionHandlerExceptionResolver
1. 遍历所有的 handlerExceptionResolvers,调用 resolver.resolveException 方法返回 modelAndView 对象
2. processHandlerException 执行异常处理
如果处理发生异常,会执行 processDispatchResult 来处理异常
1. DispatcherServlet#doService
2. 请求处理过程
github
3. 实例代码
spring mvc 源码解析
0 条评论
回复 删除
下一页