开发者社区 问答 正文

Spring dispatcher配置文件的问题

最近在学Spring mvc,有点疑问请指点下

在dispatcher-servlet.xml中配置handlerMapping和viewResolver时的id是固定的还是随意写的?如果我定义了一个id为handlerMapping类型为SimpleUrlHandlerMapping,然后再定义一个id为handlerMapping2类型为BeanNameUrlHandlerMapping,会有什么影响?

展开
收起
a123456678 2016-03-17 14:45:14 2412 分享 版权
1 条回答
写回答
取消 提交回答
  • 看代码,DispatcherServlet在找viewResolvers的时候是按照Type方式来找的,就是ViewResolver.class:

    private void initViewResolvers(ApplicationContext context) {
            this.viewResolvers = null;
     
            if (this.detectAllViewResolvers) {
                // Find all ViewResolvers in the ApplicationContext, including ancestor contexts.
                Map<String, ViewResolver> matchingBeans =
                        BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
                if (!matchingBeans.isEmpty()) {
                    this.viewResolvers = new ArrayList<ViewResolver>(matchingBeans.values());
                    // We keep ViewResolvers in sorted order.
                    OrderComparator.sort(this.viewResolvers);
                }
            }
            else {
                try {
                    ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class);
                    this.viewResolvers = Collections.singletonList(vr);
                }
                catch (NoSuchBeanDefinitionException ex) {
                    // Ignore, we'll add a default ViewResolver later.
                }
            }
     
            // Ensure we have at least one ViewResolver, by registering
            // a default ViewResolver if no other resolvers are found.
            if (this.viewResolvers == null) {
                this.viewResolvers = getDefaultStrategies(context, ViewResolver.class);
                if (logger.isDebugEnabled()) {
                    logger.debug("No ViewResolvers found in servlet '" + getServletName() + "': using default");
                }
            }
        }
    2019-07-17 19:05:22
    赞同 展开评论