springMVC源码

springMVC

执行流程

请求进入SpringMVC会执行DispatchServlet的doDispatch方法。

HandlerMappings

handlerMappings是一个List,HandlerMapping最重要的一个实现类是RequestMappingHandlerMapping。
RequestMappingHandlerMapping负责搜索项目中采用RequestMapping来注解的方法,这也是现在spring中定义请求的最主要的方式。
RequestMappingHandlerMapping中有MappingRegistry的成员变量,它维护这两个重要的map

MultiValueMap<String, T> urlLookup
Map<T, HandlerMethod> mappingLookup

通过这两个map最后拿到执行的方法。

HandlerAdapter

拿到了需要执行的方法,springMVC下一步要做的是确定这个方法的调用方式。
HandlerAdapter最重要的实现类是RequestMappingHandlerAdapter,也是因为因为现在所有的请求方法都是采用的RequestMapping。
但是为了兼容以前定义Controller的代码,比如实现Controller接口这种方式。
通过这一步,确定了方式的执行方式。

HandlerMethodArgumentResolver

因为整个SpringMVC中,是通过反射的方式来执行RequestMapping注解标记的方式。
这一步是获取方法里的参数值。

比如@RequestBody或是@PathVariable等注解标记的参数
HandlerMethodArgumentResolver是一个接口,有众多实现类,包括,PathVariableMethodArgumentResolver处理PathVariable注解,RequestParamArgumentResolver处理RequestParam注解,RequestResponseBodyMethodProcessor处理@RequestBody注解。

反射执行

通过HandlerMethodArgumentResolver获取到参数以后,通过反射执行方法。

HandlerMethodReturnValueHandler

方法执行后通过HandlerMethodReturnValueHandler返回,因为现在最常用的是前后端分离,所有其中最常用的是RequestResponseBodyMethodProcessor。
RequestResponseBodyMethodProcessor类同时实现了HandlerMethodReturnValueHandler和HandlerMethodArgumentResolver接口

RequestResponseBodyMethodProcessor

RequestResponseBodyMethodProcessor由包含多个MessageConverter,用于处理不同的类和不同的MediaType。
其中最常用的是处理MediaType为json的MappingJackson2HttpMessageConverter

posted @ 2020-10-12 08:47  刃牙  阅读(167)  评论(0编辑  收藏  举报