关于源码解析的文章,我感觉阅读学习的效率并不高。没有脑图来的实在,自顶向下自行学习,能大大增加学习效率。【图解Springboot】系列文章只放干货,不说废话。
WebMvcAutoConfiguration
是Springboot的自动装载WebMvc的入口,这一点可以通过 spring.factories
配置文件得知。 WebMvcAutoConfiguration
在加载前, @AutoConfigureAfter
会先加载 DispatcherServletAutoConfiguration
,而 DispatcherServletAutoConfiguration
加载前又会加载 ServletWebServerFactoryAutoConfiguration
WebMvcAutoConfiguration
会加载 EnableWebMvcConfiguration
和 WebMvcAutoConfigurationAdapter
两个内部类创建并配置包括 消息转换器
、 视图解析器
、 处理器映射器
、 处理器适配器
、 静态资源映射配置
等。 Customizer
来自定义编程式配置。 DispatcherServlet
表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,
DispatcherServlet
接收请求并拦截请求。
2. HandlerMapping
为处理器映射。 DispatcherServlet
调用 HandlerMapping
, HandlerMapping
根据请求url查找 Handler
3. HandlerExecution
表示具体的 Handler
,其主要作用是根据url查找控制器,如上url被查找控制器为:input-product
4. HandlerExecution
将解析后的信息传递给 DispatcherServlet
,如解析控制器映射等
5. HandlerAdapter
表示处理器适配器,其按照特定的规则去执行 Handler
6. Handler
让具体的 Controller
执行
7. Controller
将具体的执行信息返回给 HandlerAdapter
,如ModelAndView
8. HandlerAdapter
将视图逻辑名或模型传递给 DispatcherServlet
9. DispatcherServlet
调用视图解析器( ViewResolver
)来解析 HandlerAdapter
传递的逻辑视图名
10.视图解析器将解析的逻辑视图名传给 DispatcherServlet
11. DispatcherServlet
根据视图解析器解析的视图结果,调用具体的视图
12.最终视图呈现给用户。
当然日常开发中,我们并不一定会用到 ViewResolver
,大多数情况是返回JSON数据。 @RestController
中的 @ResponseBody
会帮我们处理这个问题。
/** * Annotation that indicates a method return value should be bound to the web * response body. Supported for annotated handler methods. * * <p>As of version 4.0 this annotation can also be added on the type level in * which case it is inherited and does not need to be added on the method level. * * @author Arjen Poutsma * @since 3.0 * @see RequestBody * @see RestController */ 复制代码