spring mvc为何多注入了个SimpleUrlHandlerMapping?

最近在调试项目时,debug DispatcherServlet时,发现handlerMappings属性包含了RequestMappingHandlerMapping、SimpleUrlHandlerMapping、BeanNameUrlHandlerMapping。

可是我明明只声明了

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>

真是百思不得解啊,因为是旧项目基础改造的,以为是别的地方有隐秘用法,找了半天,没找到,今天下班时,突然想到我注册了

<mvc:resources location="" mapping=""/>

翻看ResourcesBeanDefinitionParser,查到了关键代码:

1.

RootBeanDefinition handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class);
     handlerMappingDef.setSource(source);
     handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
     handlerMappingDef.getPropertyValues().add("urlMap", urlMap);

2.

// Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off"
     // Register HttpRequestHandlerAdapter
     MvcNamespaceUtils.registerDefaultComponents(parserContext, source);

指向

public static void registerDefaultComponents(ParserContext parserContext, Object source) {
       registerBeanNameUrlHandlerMapping(parserContext, source);
        registerHttpRequestHandlerAdapter(parserContext, source);
        registerSimpleControllerHandlerAdapter(parserContext, source);
    }

才知道原因了。呵呵。

posted @ 2013-12-23 21:53  beiyeren  阅读(3830)  评论(0编辑  收藏  举报