Spring MVC创建了一些开箱即用的默认对象,如HandlerMapping,ViewResolver等。
配置文件在哪里配置默认创建的这些bean? (我不是在谈论我们提供的配置文件。)
我想知道Spring存储的默认配置在哪里,用于创建上述对象的默认开箱即用实现?
答案 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中,而不是在任何特定的配置文件中。