当前位置 博文首页 > L-Java:Spring MVC 初始化源码(3)—<mvc:annotation-driven >

    L-Java:Spring MVC 初始化源码(3)—<mvc:annotation-driven >

    作者:[db:作者] 时间:2021-07-08 18:58

    ??基于最新Spring 5.x,详细介绍了Spring MVC 初始化流程的源码,主要包括<mvc:annotation-driven >配置标签的源码解析。

    ??我正在参与CSDN《新程序员》有奖征文,活动地址:https://marketing.csdn.net/p/52c37904f6e1b69dc392234fff425442。

    ??此前我们讲过了DispatcherServlet与子容器的初始化以及MVC组件的初始化,我们说过如果IoC容器中存在给定类型的组件,那么DispatcherServlet#onRefresh()方法中就不会尝试初始化默认组件了。
    ??而在初始化IoC子容器的时候,将会解析Spring MVC的配置文件,在配置文件中就有可能初始化我们自定义的一些组件bean,也有可能会加载其他MVC配置标签,最常见的就是<mvc:annotation-driven >标签,实际上该标签就会向容器注册一些组件bean,并且还会进行额外的配置。
    ??<mvc:annotation-driven>标签为基于注解的SpringMVC驱动提供便捷配置,虽然Spring mvc5版本之后Spring MVC会默认加载大部分的默认组件,但是使用该标签仍然能够自动加载某些额外配置,比如自动发现并注册MappingJackson2HttpMessageConverter转换器以支持JSON数据交互的请求和响应。
    ??mvc系列标签同样属于扩展标签,根据我们此前学过的IoC容器初始化源码,扩展标签将会在IoC容器初始化的parseCustomElement方法中解析,mvc标签的解析器位于MvcNamespaceHandler类中:
    在这里插入图片描述
    ??可以知道<mvc:annotation-driven >标签是由AnnotationDrivenBeanDefinitionParser这个解析器来解析的。

    ??下面的源码版本基于5.2.8.RELEASE。源码解析基于传统的SSM项目,不适用于Spring Boot项目。

    Spring MVC源码 系列文章

    Spring MVC 初始化源码(1)—ContextLoaderListener与父上下文容器的初始化

    Spring MVC 初始化源码(2)—DispatcherServlet与子容器的初始化以及MVC组件的初始化【一万字】

    Spring MVC 初始化源码(3)—<mvc:annotation-driven >配置标签的源码解析

    Spring MVC 初始化源码(4)—@RequestMapping注解的源码解析

    Spring MVC 请求执行流程的源码深度解析【两万字】

    文章目录

    • Spring MVC源码 系列文章
    • 1 AnnotationDrivenBeanDefinitionParser静态块
    • 2 parse执行解析
      • 2.1 注册RequestMappingHandlerMapping
        • 2.1.1 configurePathMatchingProperties配置路径匹配
      • 2.2 注册RequestMappingHandlerAdapter
        • 2.2.1 配置ConfigurableWebBindingInitializer
          • 2.2.1.1 getConversionService获取转换服务
          • 2.2.1.2 getValidator获取校验器
          • 2.2.1.3 getMessageCodesResolver
        • 2.2.2 getMessageConverters获取消息转换器
        • 2.2.3 getArgumentResolvers获取参数解析器
        • 2.2.4 getReturnValueHandlers获取返回值解析器
        • 2.2.5 获取异步处理属性
          • 2.2.5.1 getAsyncTimeout获取异步处理超时时间
          • 2.2.5.1 getAsyncExecutor获取异步处理线程池
          • 2.2.5.1 getInterceptors获取异步处理拦截器
        • 2.2.6 支持@JsonView注解解析
    • 3 总结
    cs