美文网首页
DispatcherServlet初始化二

DispatcherServlet初始化二

作者: 程序员札记 | 来源:发表于2023-06-03 08:07 被阅读0次

基本流程图

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

image.png

都是哪来的

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

image.png

WebMvcAutoConfigurationEnableWebMvcConfigurationWelcomePageHandlerMapping

image.png

WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportBeanNameUrlHandlerMapping

image.png

WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportRouterFunctionMapping

image.png

WebMvcAutoConfigurationEnableWebMvcConfiguration的父类WebMvcConfigurationSupportSimpleUrlHandlerMapping

image.png

相关文章

网友评论

      本文标题:DispatcherServlet初始化二

      本文链接:https://www.haomeiwen.com/subject/cwamedtx.html