Spring MVC上的全局XML配置?

时间:2012-07-29 11:19:39

标签: xml spring configuration

Spring MVC创建了一些开箱即用的默认对象,如HandlerMapping,ViewResolver等。

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

我想知道Spring存储的默认配置在哪里,用于创建上述对象的默认开箱即用实现?

1 个答案:

答案 0 :(得分:0)

我假设您在询问类似<mvc:annotation-driven>之类的内容时,询问Spring MVC创建的默认handlerMapping和验证器。

这基本上是一个名为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命名空间的mvc标记注册AnnotationDrivenBeanDefinitionParser

此处默认为已注册。

例如,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中,而不是在任何特定的配置文件中。