Spring MVC上的全局XML配置?
问题描述:
Spring MVC创建了一些默认开箱即用的对象,例如HandlerMapping,ViewResolver等。Spring MVC上的全局XML配置?
默认情况下创建的这些bean的配置文件在哪里配置? (我不是在谈论我们提供的配置文件)。
我在问什么是存储默认配置,Spring使用它来创建上述对象的默认开箱即用的实现?
答
我假设你问的是默认的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中,而不在任何特定的配置文件中。