Spring IOC 之解析 bean 标签:解析自定义标签

processBeanDefinition() 负责 Bean 标签的解析

  • 在解析过程中首先调用 BeanDefinitionParserDelegate.parseBeanDefinitionElement() 完成默认标签的解析
  • 如果解析成功(返回的 bdHolder != null ),则首先调用 BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired() 完成自定义标签元素解析
public BeanDefinitionHolder decorateBeanDefinitionIfRequired(Element ele, BeanDefinitionHolder definitionHolder) {
		return decorateBeanDefinitionIfRequired(ele, definitionHolder, null);
	}

调用 decorateBeanDefinitionIfRequired() :

116247b90cdebb156f9a064c469106fdb45.jpg

  • 遍历节点(子节点),调用 decorateIfRequired() 装饰节点(子节点)
    • 首先获取自定义标签的命名空间,如果不是默认的命名空间则根据该命名空间获取相应的处理器
    • 最后调用处理器的 decorate() 进行装饰处理

Bean 的解析过程已经全部完成了,下面做一个简要的总结:

  • 解析 BeanDefinition 的入口在 DefaultBeanDefinitionDocumentReader.parseBeanDefinitions()
    • 该方法会根据命令空间来判断标签是默认标签还是自定义标签
      • 其中默认标签由 parseDefaultElement() 实现
      • 自定义标签由 parseCustomElement() 实现
    • 在默认标签解析中,会根据标签名称的不同进行 import 、alias 、bean 、beans 四大标签进行处理,其中 bean 标签的解析为核心,它由 processBeanDefinition() 方法实现
      • processBeanDefinition() 开始进入解析核心工作,分为三步:
        • 解析默认标签:BeanDefinitionParserDelegate.parseBeanDefinitionElement()
        • 解析默认标签下的自定义标签:BeanDefinitionParserDelegate.decorateBeanDefinitionIfRequired()
        • 注册解析的 BeanDefinition:BeanDefinitionReaderUtils.registerBeanDefinition
           
      • 核心工作由 parseBeanDefinitionElement() 方法实现,该方法会依次解析 Bean 标签的属性、各个子元素,解析完成后返回一个 GenericBeanDefinition 实例对象

 

转载于:https://my.oschina.net/u/3847203/blog/2251264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值