SpringMvc源码分析
2024-06-30 17:13:35 1 举报
AI智能生成
springmvc
作者其他创作
大纲/内容
SpringMvc启动流程
Tomcat启动
解析web.xml
创建DispatchServlet对象
调用DispatchServlet对象的.init()方法
创建Spring容器
发布ContextRefreshEvent事件
触发执行initStrategies()
初始化HandlerMappings
BeanNameUrlHandlerMapping
执行detectHandler(),找到beanName为/xxx的Bean
handlerMap<path,Bean对象>
path就是beanName
RequestMappingHanderMapping
执行afterPropertiesSet(),找到@RequestMapping的方法
pathLookup<path,RequestMappingInfo>
registy<RequestMappingInfo,HandlerMethod>
HandlerMethod((Object handler,Method method))
RouterFuncationMapping
初始化HandlerAdapters
HttpRequestHandlerAdapter
SImpleContollerHandlerAdapter
RequestMappingHandlerAdapter
生成默认的HandlerMethodArgumentResolver
生成默认的HandlerMethodReturnValueHandler
HandlerFunctionAdapter
SpringMvc处理请求流程
根据请求path找Handler
遍历HandlerMappingl来匹配请求的path的Handler
BeanNameUrlHandlerMapping会从handlerMap找
RequestMappingHandlerMapping会找pathLookup找
找到Handler后执行Handler
根据不同的Handler类型返回对应的HandlerAdapter
遍历HandlerAdapter看哪个Handler支持当前Handler
SimplerControllerHandlerAdapter支持的Handler类型为Controller
RequestMappingHandlerAdapter支持的Handler类型为HandlerMethod
哪个HandlerAdapter支持就返回哪个
调用HandlerAdapter的handler(),会传入Request对象、Repsonse对象、Handler对象
HttpRequestHandlerAdaper的handle()会将Handler对象转成HttpRequestHandler,然后执行handleRequest()方法,从而执行业务代码
HttpRequestHandlerAdapter支持的Handler类型HttpRequestHandler
SimplerControllerHandlerAdaper的handle()会将Handler对象转成Controller,然后执行handleRequest()方法,从而执行业务代码
RequestMappingHandlerAdapter的handle()会将Handler对象转成HandlerMetod类型,然后执行HandlerMethod的Method方法
解析方法参数
HandlerMethodArgumentResolver
执行方法
解析方法返回值
HandlerMethodReturnValueResolver
有@RequestBody注解
RequestResponseBodyMethodProcessor
没有@RequestBody注解
返回类型为CharSequeue
ViewNameMthodReturnValueHandler
String实现了CharSequeue接口
0 条评论
下一页