以下为个人总结,欢迎大家补充指正
springmvc初始化springboot对springmvc进行了再次封装,根据约定大约配置的思想,减少了spring时期的mvc的各种配置;
一: springboot启动过程中,自动读取META-INF/spring.factories的配置文件,加载配置类的bean对象,将DispatcherServletAutoConfiguration配置温江中dispatchservlet的bean对象加载到spring容器中,
二: 之后将处理器对象(controller),方法对象(处理器method),映射对象(requestmapping)注册到AbstractHandlerMethodMapping中的MappingReistry类中的对象中主要包含:
(1)registry对象:工程已注册的mapping对象,包含mapping路径,处理器方法等
(2)pathLookup:找到的所有映射路径对象
(3)nameLookup:找到的所有映射名称(mappingname)对象
一: 客户端发起请求,服务器DispatcherServlet接收到请求,最终执行doDispatch方法;
二: 找到要执行目标
(1)执行getHandler方法,找到所有处理器映射器,即实现了hanlderMapping接口的映射器,如:RequstMappingHandlerMapping;
(2)遍历映射器,寻找最合适的处理器映射器,由于RequstMappingHandlerMapping针对的就是带有@controller及@RequestMapping的映射器;
(3)去AbstractHandlerMethodMapping类(是RequstMappingHandlerMapping的父类),执行lookupHandlerMethod,根据初始化已注册的信息匹配最佳处理器方法HandlerMethod;
(4)之后获取HandlerInterceptor拦截器对象,可通过HandlerInterceptor接口自定义拦截器;最终组成处理器handlerExecutionChain执行链;
三: 匹配目标由谁来执行,即根据hanlder执行getHandlerAdapter方法,匹配具体由哪个适配器执行请求方法;
(1)找到所有处理器适配器,即实现了hanlderAdapter接口的映射器,如:RequstMappingHandlerAdapter;
(2)遍历适配器,寻找支持该处理器的适配器,由于RequestMappingHandlerAdapter针对的就是犯法带有@RequestMapping的适配器,即匹配到RequestMappingHandlerAdapter适配器;
四: 由具体适配器执行handler方法,执行具体的controller中的方法,得到ModelAndView,如controller方法返回的非body(即视图地址),而非body,则model为数据,view为视图地址;如方法返回body,则ModelAndView返回为空;
五: 如返回视图,则后续会进行视图解析及数据渲染;



