2023-09-14
原文作者:王伟王胖胖 原文地址: https://blog.csdn.net/wangwei19871103/article/details/105520171

基本流程图,方便查看

202309142300234651.png

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个:

202309142300259362.png

都是哪来的

我们看看这些是怎么来的,其实都是自动配置里的EnableWebMvcConfiguration中的。
WebMvcAutoConfigurationEnableWebMvcConfigurationRequestMappingHandlerMapping

202309142300265873.png
WebMvcAutoConfigurationEnableWebMvcConfigurationWelcomePageHandlerMapping

202309142300271574.png
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportBeanNameUrlHandlerMapping

202309142300278245.png
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportRouterFunctionMapping

202309142300283346.png
WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportSimpleUrlHandlerMapping

202309142300290647.png

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

阅读全文