阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

一、获取BeanFactory子流程

时序图如下

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

二、BeanDefinition加载解析及注册子流程

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

Resource定位:指对BeanDefinition的资源定位过程。通俗讲就是找到定义Javabean信息的XML文件,并将其封装成Resource对象

BeanDefinition载入 :把用户定义好的Javabean表示为IoC容器内部的数据结构,这个容器内部的数据结构就是BeanDefinition。

注册BeanDefinition到 IoC 容器

2.过程分析

Step 1:子流程入口在 AbstractRefreshableApplicationContext#refreshBeanFactory 方法中

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

Step 2:依次调用多个类的 loadBeanDefinitions 方法 —> AbstractXmlApplicationContext —> AbstractBeanDefinitionReader —> XmlBeanDefinitionReader 一直执行到 XmlBeanDefinitionReader 的 doLoadBeanDefinitions 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

Step 3:我们重点观察XmlBeanDefinitionReader 类的 registerBeanDefinitions 方法,期间产生了多次重载调用,我们定位到最后一个

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

此处我们关注两个地方:一个createRederContext方法,一个是 DefaultBeanDefinitionDocumentReader类的registerBeanDefinitions方法,先进入createRederContext 方法看看

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

我们可以看到,此处 Spring 首先完成了 NamespaceHandlerResolver 的初始化。

我们再进入 registerBeanDefinitions 方法中追踪,调用了 DefaultBeanDefinitionDocumentReader#registerBeanDefinitions 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

进入 doRegisterBeanDefinitions 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

进入 parseBeanDefinitions 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

进入 parseDefaultElement 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

进入 processBeanDefinition 方法

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

至此,注册流程结束,我们发现,所谓的注册就是把封装的 XML 中定义的 Bean信息封装为BeanDefinition 对象之后放入一个Map中,BeanFactory 是以 Map 的结构组织这些 BeanDefinition的。

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

可以在DefaultListableBeanFactory中看到此Map的定义

/** Map of bean definition objects, keyed by bean name. */private final Map<String, BeanDefinition> beanDefinitiOnMap= new ConcurrentHashMap<>(256);

3.时序图

阿里面试官:说说 Spring 源码中 BeanFactory 的创建流程

本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2022-12-14 11:37
下一篇 2022-12-14 11:44

相关推荐

  • 卡塔尔足球世界杯赛程出炉

    北京时间21日0点,2022卡塔尔世界杯揭幕战将展开,对阵双方为东道主卡塔尔VS厄瓜多尔,决赛将于北京时间12月18日23时在卢塞尔体育场进行。32支球队,64场赛事,四年一届的世…

    2022-11-21
  • 天津吃牛头哪家味道正宗环境好点

    天津卫的嘴巴果然也是走的民风彪悍的路子,烤全羊那算是见怪不怪了,不算啥,牛头宴吃过没?牛头宴的气势一点都不输阵。 意库创意产业园区的牛头宴,就是在个蒙古包里,熏牛头很大,估计是先炖…

    2022-12-08
  • 暗黑破坏神4最低配置,暗黑破坏神4需要多大配置才能玩

    在暗黑4前几次的测试中,玩家们对于这款游戏的喜爱程度已经溢于言表,正在万分期待6月6日暗黑4正式开服,也有很多玩家担心电脑带不动暗黑4,询问暗黑4配置是什么,下面小编就为大家带来关…

    2023-06-03
  • 宝宝总是夜惊怎么回事(宝宝频繁夜惊是什么原因)

        夜啼是指小儿经常在夜间啼哭吵闹,或间歇发作,或持续不已,甚至通宵达旦,民间常称小儿为“夜啼郎”。多由于脾寒、心热、惊恐等引起。 1.脾寒 临床表现:夜间啼哭,神怯困倦,四肢…

    2023-02-06
  • 剑灵合区

    “慕恋之情”,这款时装尽显侠骨柔情,即有侠客的铁血柔情又掩饰不住妩媚妖娆,即仙风道骨又能迷倒万千少女。 @吃西瓜的小婷婷:那段时间刚好是剑灵合区的时候,第一次在组队里遇见的时,他是…

    2022-12-02
  • 为什么要禁黄,黄赌毒危害都很大,为什么有人能同意禁毒、禁赌、而不同意禁黄?

    除了美国、等极少数国家合法化之外,世界各国对于色情,基本上都是宣布其非法,但实际执行时候又睁一只眼闭一只眼。 理由太简单,这世上总有几千万的光棍讨不到老婆,如果再不允许他们看AV,…

    用户投稿 2022-11-16
  • 《爱情公寓》最新一季

    各位爱情公寓老粉 你们在哪里 想必你们已经知道了这个好消息 时隔六年,爱情公寓最终季正式回归 2020年1月12日 《爱情公寓5》将在爱奇艺正式播出啦! 伴随着熟悉的片头曲 只要他…

    2022-11-21
  • 民航飞机如何排除故障

    民航飞机应该一般不会在空中排除故障。 易发生故障的系统,都是双套系统,为安全计,其在飞机设计之初,已想到了前面,比如发动机,遭遇单发空中停车的情况,只用一台也可飞回来,双发空中停车…

    2023-03-11
  • 学霸机到底怎么样(学霸用什么中端机)

    联想G50,一款在笔吧属于传说级别的笔记本电脑,曾经骗人无数,各大电脑城都把这款笔记本放在“财神爷”的位置上供着。 这是为什么呢? 因为它实际价格只有3000出头,但标配大显存+真…

    2023-04-23
  • 试想一个女生的世界里有一个李大仁是什么感受

    曾听过这样的话:十年修得柯景腾,百年修得王小贱,千年修得李大仁,万年修得陆励成,亿年修得何以琛 如果作为一个女生你的身边有一个李大仁, 他不高不帅不矮不胖很平凡 。你开心的时候你基…

    2022-12-13