最近在调试项目时,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);
    }

才知道原因了。呵呵。

相关文章:

  • 2021-10-11
  • 2022-12-23
  • 2022-01-16
  • 2021-07-26
  • 2021-09-16
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-11
  • 2021-06-08
  • 2022-12-23
  • 2021-10-07
  • 2021-09-23
  • 2022-02-18
  • 2022-12-23
相关资源
相似解决方案