2012-07-29 48 views
0

Spring MVC创建了一些默认开箱即用的对象,例如HandlerMapping,ViewResolver等。Spring MVC上的全局XML配置?

默认情况下创建的这些bean的配置文件在哪里配置? (我不是在谈论我们提供的配置文件)。

我在问什么是存储默认配置,Spring使用它来创建上述对象的默认开箱即用的实现?

回答

0

我假设你问的是默认的handlerMapping,当你指定类似<mvc:annotation-driven>的东西时,由Spring MVC创建的验证器。

这基本上是一个名为mvc的自定义Spring命名空间,这个自定义命名空间由MvcNamespaceHandler处理。如果你看一下这个类的源,这是一些相关的内容:

registerBeanDefinitionParser("annotation-driven", new AnnotationDrivenBeanDefinitionParser()); 
    registerBeanDefinitionParser("default-servlet-handler", new DefaultServletHandlerBeanDefinitionParser()); 
    registerBeanDefinitionParser("interceptors", new InterceptorsBeanDefinitionParser());  
    registerBeanDefinitionParser("resources", new ResourcesBeanDefinitionParser()); 
    registerBeanDefinitionParser("view-controller", new ViewControllerBeanDefinitionParser()); 

这是基于其标签基本上是注册了一系列解析器被发现,所以它上面的annotation-driven标签注册AnnotationDrivenBeanDefinitionParsermvc命名空间。

这里默认值是注册的。

对于例如,HandlerMapping的注册是这样的:

RootBeanDefinition methodMappingDef = new RootBeanDefinition(RequestMappingHandlerMapping.class); 
    methodMappingDef.setSource(source); 
    methodMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); 
    methodMappingDef.getPropertyValues().add("order", 0); 
    String methodMappingName = parserContext.getReaderContext().registerWithGeneratedName(methodMappingDef); 

按照同样的思路其它组件注册。所以实质上,配置通过代码在不同的AnnotationDrivenBeanDefinitionParsers中,而不在任何特定的配置文件中。