说在前面
本次主要介绍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
说到最后
本次源码解析仅代表个人观点,仅供参考。