0

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

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

我在问Spring用来创建上述对象的默认开箱即用实现的默认配置存储在哪里?

4

1 回答 1

0

我假设您正在询问默认的 handlerMapping,当您指定类似<mvc:annotation-driven>.

这基本上是一个名为 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());

这本质上是根据找到的标签注册一系列解析器,所以上面是为命名空间的标签注册一个AnnotationDrivenBeanDefinitionParserannotation-drivenmvc

在这里注册默认值。

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

于 2012-07-29T12:15:45.817 回答