Spring MVC 创建一些开箱即用的默认对象,例如 HandlerMapping、ViewResolver 等。
配置这些默认创建的bean的配置文件在哪里?(我不是在谈论我们提供的配置文件)。
我在问Spring用来创建上述对象的默认开箱即用实现的默认配置存储在哪里?
Spring MVC 创建一些开箱即用的默认对象,例如 HandlerMapping、ViewResolver 等。
配置这些默认创建的bean的配置文件在哪里?(我不是在谈论我们提供的配置文件)。
我在问Spring用来创建上述对象的默认开箱即用实现的默认配置存储在哪里?
我假设您正在询问默认的 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());
这本质上是根据找到的标签注册一系列解析器,所以上面是为命名空间的标签注册一个AnnotationDrivenBeanDefinitionParser。annotation-driven
mvc
在这里注册默认值。
例如,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 中,而不是在任何特定的配置文件中。