BeanFactory 创建流程

BeanFactory 创建流程

获取 BeanFactory 子流程

时序图:
在这里插入图片描述

BeanDefinition 加载解析及注册子流程

该子流程涉及到如下几个关键步骤:

  1. Resource 定位:对 BeanDefinition 的资源定位过程,找到定义 JavaBean 信息的 XML文件,并将其封装成 Resource 对象。
  2. BeanDefinition 载入:把用户定义好的 JavaBean 表示为 IoC 容器内部的数据结构,这个容器内部的数据结构就是 BeanDefinition。
  3. 注册 BeanDefinition 到 IoC 容器

过程分析

  1. 子流程入口在 org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory 方法中。
    在这里插入图片描述

  2. 依次调用多个类的 loadBeanDefinitions 方法 ->AbstractXmlApplicationContext -> AbstractBeanDefinitionReader -> XmlBeanDefinitionReader ​ 一直执行到 XmlBeanDefinitionReader 的 doLoadBeanDefinitions 方法。

  3. 重点观察 XmlBeanDefinitionReader 类的 registerBeanDefinitions 方法,期间产生了多次重载调用,我们定位到最后一个。
    在这里插入图片描述
    在这里插入图片描述

此处关注两个地方:一个 createRederContext 方法,一个是 DefaultBeanDefinitionDocumentReader 类的 registerBeanDefinitions 方法,先进入 createRederContext 方法看看。
在这里插入图片描述

可以看到,此处 Spring 首先完成了 NamespaceHandlerResolver 的初始化。
再进入 registerBeanDefinitions 方法中追踪,调用了
DefaultBeanDefinitionDocumentReader#registerBeanDefinitions 方法。
在这里插入图片描述

进入 doRegisterBeanDefinitions 方法
在这里插入图片描述

进入 parseBeanDefinitions 方法
在这里插入图片描述

进入 parseDefaultElement 方法
在这里插入图片描述

进入 processBeanDefinition 方法
在这里插入图片描述

至此,注册流程结束,注册就是把封装的 XML 中定义的 Bean 信息封装为 BeanDefinition 对象之后放入一个 Map 中,BeanFactory 是以 Map 的结构组织这些 BeanDefinition 的。
在这里插入图片描述

可以在 DefaultListableBeanFactory 中看到此Map的定义
在这里插入图片描述

时序图:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值