spring加载自定义命名空间【springmvc的【mvc:annotation-driven】配置】

spring加载自定义命名空间

具体步骤:

1、通过xml命名空间找到具体的解析处理器

2、根据localName定位到具体的解析器

3、解析具体的xml生成beandefinition注册到spring容器中

主要配置文件和类:

META-INF/spring.handlers

META-INF/spring.schemas

NamespaceHandler

BeanDefinitionParser

*.xsd

================【springmvc的【mvc:annotation-driven】配置】源码分析==============

BeanDefinitionParserDelegate.parseCustomElement(Element ele, BeanDefinition containingBd)//解析beanDefinition

 –>getNamespaceURI(ele)//根据解析的Element获取命名空间

 –>this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri)//根据命名空间获取NamespaceHandler

   –>DefaultNamespaceHandlerResolver.resolve(String namespaceUri)//根据classpath:META-INF/spring.handlers文件获取NamespaceHandler实例

     –>getHandlerMappings()//获取处理器映射关系(默认从classpath:META-INF/spring.handlers下获取)

–>PropertiesLoaderUtils.loadAllProperties(this.handlerMappingsLocation, this.classLoader);//加载本地的spring.handlers文件到内存中

–>CollectionUtils.mergePropertiesIntoMap(mappings, handlerMappings);//把Properties文件缓存到ConcurrentHashMap中

 –>handler.parse(ele, new ParserContext(this.readerContext, this, containingBd))//定位到具体的解析处理器实现部分生成beanDefinition注入容器中

–>NamespaceHandlerSupport.parse(Element element, ParserContext parserContext)//拿NamespaceHandlerSupport举一个例子

–>findParserForElement(element, parserContext)//获取解析器AnnotationDrivenBeanDefinitionParser(mvc:annotation-driven)

–>parserContext.getDelegate().getLocalName(element)//通过mvc:annotation-driven获取AnnotationDrivenBeanDefinitionParser并返回

–>AnnotationDrivenBeanDefinitionParser.parse(element, parserContext)//真正的解析在此

–>new RootBeanDefinition(RequestMappingHandlerMapping.class)//初始化RequestMappingHandlerMapping

–>readerContext.getRegistry().registerBeanDefinition(HANDLER_MAPPING_BEAN_NAME , handlerMappingDef)//注入spring容器中

–>MvcNamespaceUtils.registerCorsConfigurations(null, parserContext, source)//注入mvcCorsConfigurations

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/CSDNDN/article/details/79431622
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞