博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc源码解析之@EnableWebMvc六
阅读量:6334 次
发布时间:2019-06-22

本文共 2621 字,大约阅读时间需要 8 分钟。

hot3.png

说在前面

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

 

springmvc配置解析

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

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

@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#mvcContentNegotiationManager

@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#mvcViewResolver

 

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

初始化RequestMappingHandlerMapping

初始化视图路径匹配器PathMatcher

初始化url路径匹配器UrlPathHelper

初始化媒体类型转换器ContentNegotiationManager

初始化viewControllerHandlerMapping

初始化BeanNameUrlHandlerMapping

初始化resourceHandlerMapping

初始化ResourceUrlProvider

初始化defaultServletHandlerMapping

初始化RequestMappingHandlerAdapter

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

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

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

初始化FormattingConversionService

初始化Validator

初始化CompositeUriComponentsContributor

初始化HttpRequestHandlerAdapter

初始化SimpleControllerHandlerAdapter

初始化HandlerExceptionResolver

初始化ViewResolver

初始化HandlerMappingIntrospector

 

说到最后

本次源码解析仅代表个人观点,仅供参考。

 

转载于:https://my.oschina.net/u/3775437/blog/3026108

你可能感兴趣的文章
使用 ftrace 调试 Linux 内核【转】
查看>>
唯一聚集索引上的唯一和非唯一非聚集索引
查看>>
Spark新愿景:让深度学习变得更加易于使用——见https://github.com/yahoo/TensorFlowOnSpark...
查看>>
linux磁盘配额
查看>>
NFS文件共享服务器的搭建
查看>>
%r 和 %s 该用哪个?
查看>>
小公司职场不是“切糕”
查看>>
play工程部署到云服务器
查看>>
ListView 取消点击效果
查看>>
wampServer连接oracle
查看>>
CentOS 6.5下编译安装新版LNMP
查看>>
Android Picasso
查看>>
top命令
查看>>
javascript的作用域
查看>>
新形势下初创B2B行业网站如何经营
查看>>
初心大陆-----python宝典 第五章之列表
查看>>
java基础学习2
查看>>
sysbench使用笔记
查看>>
有关电子商务信息的介绍
查看>>
NFC·(近距离无线通讯技术)
查看>>