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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liugddx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值