springmvc源码解析之@EnableWebMvc六

说在前面web

本次主要介绍springmvc配置解析。更多精彩请关注“天河聊架构”微信公众号。spring

 

springmvc配置解析微信

@EnableWebMvc这个注解干了什么,初始化ViewResolver架构

进入到这个方法org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#mvcViewResolvermvc

@Bean
   public ViewResolver mvcViewResolver() {
//    建立视图解析器 -》
      ViewResolverRegistry registry = new ViewResolverRegistry(
            mvcContentNegotiationManager(), this.applicationContext);
//    配置视图解析器
      configureViewResolvers(registry);
      if (registry.getViewResolvers().isEmpty()) {
//       从beanFactory中查找ViewResolver类型的视图解析器的名字
         String[] names = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
               this.applicationContext, ViewResolver.class, true, false);
         if (names.length == 1) {
//          添加InternalResourceViewResolver
            registry.getViewResolvers().add(new InternalResourceViewResolver());
         }
      }

//    视图解析器组合
      ViewResolverComposite composite = new ViewResolverComposite();
      composite.setOrder(registry.getOrder());
      composite.setViewResolvers(registry.getViewResolvers());
      composite.setApplicationContext(this.applicationContext);
      composite.setServletContext(this.servletContext);
      return composite;
   }

进入到这个方法org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#mvcContentNegotiationManagerapp

@Bean
   public ContentNegotiationManager mvcContentNegotiationManager() {
      if (this.contentNegotiationManager == null) {
//       初始化媒体类型管理器
         ContentNegotiationConfigurer configurer = new ContentNegotiationConfigurer(this.servletContext);
//       设置默认类型 -》
         configurer.mediaTypes(getDefaultMediaTypes());
//       配置媒体类型管理器 -》
         configureContentNegotiation(configurer);
//       构建媒体类型管理器 -》
         this.contentNegotiationManager = configurer.buildContentNegotiationManager();
      }
      return this.contentNegotiationManager;
   }

往上返回到这个方法org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#mvcViewResolveride

 

最后咱们总结下@EnableWebMvc这个注解够干了什么。ui

初始化RequestMappingHandlerMappingthis

初始化视图路径匹配器PathMatcherurl

初始化url路径匹配器UrlPathHelper

初始化媒体类型转换器ContentNegotiationManager

初始化viewControllerHandlerMapping

初始化BeanNameUrlHandlerMapping

初始化resourceHandlerMapping

初始化ResourceUrlProvider

初始化defaultServletHandlerMapping

初始化RequestMappingHandlerAdapter

初始化默认请求参数解析器

初始化默认绑定参数解析器

初始化默认返回值参数解析器

初始化FormattingConversionService

初始化Validator

初始化CompositeUriComponentsContributor

初始化HttpRequestHandlerAdapter

初始化SimpleControllerHandlerAdapter

初始化HandlerExceptionResolver

初始化ViewResolver

初始化HandlerMappingIntrospector

 

说到最后

本次源码解析仅表明我的观点,仅供参考。

相关文章
相关标签/搜索