Spring源码深度解析(2)——默认标签的解析

接着上一节,我们继续讲解 parseDefaultElement是如何实现的。

首先我们需要知道:默认标签的解析是在 parseDefaultElement 函数中进行的,函数中的功能逻辑一目了然,分别对4种不同的标签:【import】、【alias】、【bean】和【beans】做了不同的处理。

在这里插入图片描述

上面的图是上一节中的最后一张图,我们从这张图继续分析。

在这里插入图片描述

因为这四种标签中,bean 标签最难理解,所以我们首先分析 bean 标签的处理过程。

=============================================================================================

在这里插入图片描述

  • 【步骤一】首先委托 BeanDefinitionParserDelegate 类的 parseBeanDefinitionElement 方法进行元素解析,返回 BeanDefinitionHolder 类型的实例 bdHolder,经过这个方法后,bdHolder 实例已经包含我们配置文件中配置的各种属性了,例如 【class】、【name】、【id】、【alias】等
  • 【步骤二】当返回 bdHolder 不为空的情况下若存在默认标签的子节点下再有自定义属性,还需要再次对自定义标签进行解析
  • 【步骤三】解析完成后,需要对解析后的 bdHolder 进行注册,同样,注册操作委托给了 BeanDefinitionReaderUtilsregisterBeanDefinition 方法。
  • 【步骤四】最后发出响应事件,通知相关的监视器,这个 bean 已经加载完了。

2.1 解析BeanDefinition

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

上述方法的执行过程:

  • 提取元素中的 idname 属性
  • 进一步解析其他所有属性并统封装至 GenericBeanDefinition 类型的实例中
  • 如果检测到 bean 没有指定 byName, 那么使用默认规则为此 Bean 生成 beanName
  • 将获取到的信息封装到 BeanDefinitionHolder 的实例中

在这里插入图片描述

在这里插入图片描述

【图2.1.4】中【第546行】行的作用是:创建用于承载属性的 AbstractBeanDefinition 类型的 GenericBeanDefinition。这个步骤很重要,下面我们具体分析这个过程是如何实现的。

============================================================================================

1. 创建用于属性承载的 BeanDefinition

BeanDefinition 是一个接口,在 Spring 中存在三种实现: RootBeanDefinitionChildBeanDefinition 以及 GenericBeanDefinition。三种实现均继承了 AbstractBeanDefinition , 其

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值