阿里面试官:说说 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

相关推荐

  • b站画师美图,a站韩系画师

    本作品id :82525725 今天介绍画师 Sunako 她来自芬兰 目前居住在瑞典斯德哥尔摩 近期十分喜欢画精灵少女 本作品id :84062374 P站ID:5944345 …

    2022-12-24
  • 什么是春天,什么是春天的伙伴

    春与活力 窗外有一棵老树,风吹,叶唱,沙沙作响。有时,带着沁人心脾泥土的醇香的风,就涌进这狭窄的窗框,带着味道弥漫了整个房间。每当这时,窗外的老树就冲我挥了挥枯黄的手。 又是一天清…

    2023-07-02
  • 生肖属相月份性格详解

    哪些生肖性格懦弱?我来说说三个生肖:鸡、猪、牛。 1.金鸡 鸡的懦弱是外强中干型,给人感觉经常很讲义气,会表现得大义凛然,实际临事时外强中干,不敢担责。这在八月(含八月)后出生的鸡…

    2022-11-25
  • 南京艺术学院广播电视考研报录比

    Hello! 学弟学妹们大家好! 我是你们的晓成学长, 今天来给大家分享 南京艺术学院 广播电视专业 备考信息帖干货! 学姐/学长信息 /Profile/ 晓成学长 专业方向:广播…

    2023-02-20
  • 《误入风尘》

    倒影 (下) 原来那女人是船老板儿的婆娘,凶悍歹毒人称母老虎,连船老板都俱怕三分。当她得知秀秀和船老板儿的事后,火冒三丈。她想出了一个恶毒的办法,她找到自己的兄弟,然后雇上一辆黄包…

    2022-12-09
  • 家乐福卡余额查询

    手中有亲戚朋友送的家乐福购物卡怎么用才能将价值最大化呢? 想必这个问题在各位小伙伴一收到家乐福礼品卡的时候就在想了吧? 没有用过购物卡的人,一般都会立马将这种卡拿去超市消费,从而购…

    2022-12-10
  • 动漫英雄排行榜前十名,动漫超能力反派

    现代言情的、古代穿越的、科幻悬疑的、玄幻炫技的……如今类型多样的网络自制剧,又添加了新类型:二次元进入真人世界!9日零点,二次元都市奇幻大剧《动漫英雄》正式上线视频网站。这部融合了…

    2023-04-30
  • iPhone 12和13有什么区别

    随着 iPhone 14 系列旗舰手机的发布,相信有不少 iPhone 12 用户蠢蠢欲动,到底要不要放弃 iPhone 12?升级到 iPhone 14。 如果说,你正在考虑这个…

    2022-12-18
  • 隆平高科股票跟袁隆平有什么关系

    隆平高科的全称是袁隆平农业高科技股份有限公司。很多人顾名思义,认为这是袁隆平院士的企业。 其实,袁隆平与这个公司关系密切,但这并不是他私人的企业。 这个公司的创办和发展、现状并不是…

    2023-06-19
  • 僵尸肉还能吃吗,僵尸肉为什么不能多吃

    随着生活水平的提高 肉类食品 在我们的饮食架构中 占据着越来越重要的位置 成为家家户户餐桌上 必不可少的食物 正因为肉食深受人们的喜爱 也是各种各样 最近 一则名为 “走私僵尸肉上…

    2023-09-12