Spring MVC 源码解析时序图
2021-07-20 18:55:26 1128 举报
Spring MVC 源码解析时序图
作者其他创作
大纲/内容
获取视图路径,使用最基础的 forward() 转发的方式,进行页面展示,即如下代码的方式↓↓↓↓
Spring MVC 源码解析时序图
1
3
这个renderMergedOutputModel是一个模板方法,它的实现在InternalResourceView子类中。(此处你也可以根据情况来自定以你的输出,比如说输出Excel,Pdf 等,只需要写一个继承 AbstractXlsView或AbstractPdfView 等相应父类,重写其方法即可)注意⚠️:这种情况下,你要确保你返回的 view 是你自定义的 view 名称提示:我们公司使用的导出大数据 xls 数据,就是使用的这种方式,这种导出方式可以做到通用模式
代码实现如图所示
initFlashMapManager()Flash映射管理器
如果时序图对您有用,请在右上角给点个赞吧。5个赞我能多一张文件,支持作者继续画出更好的时序图给大家,谢谢大家支持配套博客介绍:请搜索CSDN 扛麻袋的少年
实则调用子类的 onRefresh() 方法
initViewResolvers()视图解析器
initLocaleResolver()本地化解析(多语言、国际化)
2
调用doDispatch()方法,开始分发请求
doService()
9
AbstractHandlerMethodAdapter
执行 invoke() 方法
业务执行完成,最终返回一个 ModelAndView 对象
getHandlerAdapter获取处理器适配器后,调用handle()方法开始处理用户请求
调用 generate() 方法
这三个策略执行方法逻辑都一样
initThemeResolver()主题解析
invokeForRequest
此处renderMergedOutputModel() 是一个抽象方法,它有很多子类的实现,如图所示
InternalResourceView
exposeModelAsRequestAttributes()方法:for 循环将 model 模型数据一个一个的放入到HttpServletRequest对象中
FrameworkServlet
ha.handle()
initHandlerAdapters()处理器适配器
2020.08.22,过几天后将再次对Spring源码的进行深抛
ModelAndView
exposeHelpers()span style=\"font-size: inherit;\
调用 initStrategies() 方法,初始化SpringMVC九大策略
ServletInvocableHandlerMethod
Did the handler return a view to render?判断 ModelAndView 是否有返回要渲染的视图
7
实则调用handleInternal()方法
8
DispatcherServlet
doInvoke()使用给定的参数值,开始调用业务处理方法
AbstractView
执行 processDispatchResult() 方法,开始处理业务返回的结果
initMultipartResolver()multipart类型文件上传解析
调用子类的renderMergedOutputModel()方法
initServletBean()
var1.getClassLoader()).newInstance()最终通过 reflect 反射的方式,执行 Controller
initHandlerExceptionResolvers()异常解析处理器
request.getRequestDispatcher(\"视图view路径\
RequestMappingHandlerAdapter
initWebApplicationContext()
调用方法
NativeMethodAccessorImpl
InvocableHandlerMethod
4
扛麻袋的少年 2020-03-13
①从IOC容器 getBean()(因为我们会在配置文件中配置)②未配置的话,使用默认 getDefaultStrategies()
其他 6 个策略不常用,此处不做介绍,不过执行方法逻辑也和其他3个都类似
6
exposeHelpers()
initRequestToViewNameTranslator()根据视图名称解析,匹配模板
onRefresh()
5
HttpServletBean
JstlView
调用onRefresh()方法
init()
使用 MethodAccess 方式,调用generateMethod()方法
doDispatch()
(只要是IOC容器启动之后,就会去调用onRefresh() 方法)
调用 render() 方法开始渲染视图
render()
invoke()
调用 JstlView 中的 exposeHelpers()方法,为 JSP 中使用 EL 表达式做一系列操作,这样我们才能在 JSP 页面中通过 EL 表达式拿到属性值
Method
invokeAndHandle
MethodAccessorGenerator
0 条评论
下一页