SpringMVC启动流程
2025-02-08 11:26:09 0 举报
AI智能生成
分析SpringMVC启动流程源码
作者其他创作
大纲/内容
SpringMVC处理请求流程
根据请求path找Handler
遍历HandlerMapping来匹配请求path对应的Handler
BeanNameUrlHandlerMapping会去handlerMap找
RequestMappingHandlerMapping会去pathLookup找
找到Handler后执行Handler
根据不同的Handler类型返回对应的HandlerAdapter
遍历HandlerAdapter看哪个HandlerAdapter是支持当前Handler的
HttpRequestHandlerAdapter支持的Handler类型为HttpRequestHandler
SimpleControllerHandlerAdapter支持的Handler类型为Controller
RequestMappingHandlerAdapter支持的Handler类型为HandlerMethod
哪个HandlerAdapter支持就返回哪个
调用HandlerAdapter的handle(),会传入Request对象、Response对象、Handler对象
HttpRequestHandlerAdapter的handle()会将Handler对象转成HttpRequestHandler类型,然后执行handleRequest()方法,从而执行业务代码
SimpleControllerHandlerAdapter的handle()会将Handler对象转成Controller类型,然后执行handleRequest()方法,从而执行业务代码
RequestMappingHandlerAdapter的handle()会将Handler对象转成HandlerMethod类型,然后就要执行HandlerMethod对应的Method了
解析方法参数
HandlerMethodArgumentResolver
执行方法
解析返回返回值
HandlerMethodReturnValueHandler
有@ResponseBody
RequestResponseBodyMethodProcessor
没有@ResponseBody
返回类型为CharSequence
ViewNameMethodReturnValueHandler
注意String类型实现了CharSequence接口
SpringMVC启动流程
Tomcat启动
解析Web.xml
创建DispatcherServlet
调用DispatcherServlet的init()
创建Spring容器
发布ContextRefreshedEvent事件
触发执行initStrategies()
初始化HandlerMappings
BeanNameUrlHandlerMapping
执行detectHandlers(),找到beanName为/xxxx的Bean
handlerMap<path,Bean对象>
path就是beanName
RequestMappingHandlerMapping
执行afterPropertiesSet(),找到@RequestMapping的方法
pathLookup<path,RequestMappingInfo>
registry<RequestMappingInfo, HandlerMethod>
HandlerMethod((Object handler, Method method))
RouterFunctionMapping
初始化HandlerAdapters
HttpRequestHandlerAdapter
SimpleControllerHandlerAdapter
RequestMappingHandlerAdapter
生成默认的HandlerMethodArgumentResolver
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#getDefaultArgumentResolvers
生成默认的HandlerMethodReturnValueHandler
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#getDefaultReturnValueHandlers
HandlerFunctionAdapter
0 条评论
下一页