Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二

Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二

  • 基本流程图,方便查看
  • initThemeResolver
  • initHandlerMappings
    • 都是哪来的

基本流程图,方便查看

在这里插入图片描述

initThemeResolver

这个跟前面讲initLocaleResolver一样,最后获取默认的。

initHandlerMappings

这个获取处理器映射器就不一样啦,因为可能有多个,首先去容器里取HandlerMapping类型的多个实例,这个是取的到的,因为自动配置中配置了一些,如果没取到才会去找默认的:


public static final String HANDLER_MAPPING_BEAN_NAME = "handlerMapping";

private void initHandlerMappings(ApplicationContext context) {
		this.handlerMappings = null;

		if (this.detectAllHandlerMappings) {//可以找多个
			// Find all HandlerMappings in the ApplicationContext, including ancestor contexts.
			Map<String, HandlerMapping> matchingBeans =
					BeanFactoryUtils.beansOfTypeIncludingAncestors(context, HandlerMapping.class, true, false);
			if (!matchingBeans.isEmpty()) {
				this.handlerMappings = new ArrayList<>(matchingBeans.values());
				// We keep HandlerMappings in sorted order.
				AnnotationAwareOrderComparator.sort(this.handlerMappings);
			}
		}
		else {//只能找一个
			try {
				HandlerMapping hm = context.getBean(HANDLER_MAPPING_BEAN_NAME, HandlerMapping.class);
				this.handlerMappings = Collections.singletonList(hm);
			}
			catch (NoSuchBeanDefinitionException ex) {
				// Ignore, we'll add a default HandlerMapping later.
			}
		}

		// Ensure we have at least one HandlerMapping, by registering
		// a default HandlerMapping if no other mappings are found.
		if (this.handlerMappings == null) {
			this.handlerMappings = getDefaultStrategies(context, HandlerMapping.class);
			if (logger.isTraceEnabled()) {
				logger.trace("No HandlerMappings declared for servlet '" + getServletName() +
						"': using default strategies from DispatcherServlet.properties");
			}
		}
	}

最后拿到了5个:
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第1张图片

都是哪来的

我们看看这些是怎么来的,其实都是自动配置里的EnableWebMvcConfiguration中的。
WebMvcAutoConfigurationEnableWebMvcConfigurationRequestMappingHandlerMapping
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第2张图片
WebMvcAutoConfigurationEnableWebMvcConfigurationWelcomePageHandlerMapping
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第3张图片
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportBeanNameUrlHandlerMapping
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第4张图片
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportRouterFunctionMapping
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第5张图片
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportSimpleUrlHandlerMapping
Spring Boot 2.2.6 源码之旅二十SpringMVC源码之DispatcherServlet初始化二_第6张图片

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

你可能感兴趣的:(Spring,Boot,2.2.6,源码之旅,Dispatcher,SpringBoot源码解析,SpringBoot源码,SpringMVC,SpringBoot)