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

相关推荐

  • 笑傲江湖大结局令狐冲任盈盈

    {“rich_content”:{“text”:””,”spans”:null},&…

    用户投稿 2023-07-19
  • 原神萌新玩梗指南剧情

    原神游戏能有今天的热度,很大程度上要归功于游戏剧情的疯狂玩梗,这种有趣且有槽点的剧情,为游戏带来了极高的讨论度,和玩家们火热的二创热情。 随着原神中各种名场面深入人心,如今玩梗已经…

    2023-08-27
  • exo粉丝名和应援色有关系吗

    如今越来越多的人都通过组合出道,每个组合的成员数量也不一样,不过他们成员的颜值都很有看点,凭借超高实力和颜值吸引了很多粉丝们的喜欢,每个组合粉丝都有一个称呼的,下面和小编一起看下吧…

    2023-08-05
  • 广州耐克折扣店,耐克折扣店上班怎么样

    耐克阿迪折扣店在市场中发展多年,拥有非常强大的实力,在全国很多地方都有其加盟店面,每个加盟店都有络绎不绝的消费人群,拥有很好的生意。加盟运动耐克阿迪折扣店靠谱吗? 需要多少费用?耐…

    2022-12-09
  • 欢乐谷好玩吗,西安欢乐谷好玩吗

    第一次探访太行欢乐谷,是在今年春节过后,当时票价有优惠,也正好是自己准备游玩的旅游点,于是决定前往。 太行欢乐谷位于山西省长治市壶关县城北,属于一个新型综合旅游项目,主要特色是水城…

    2023-04-13
  • 国外留学费用,去哪个国家留学费用最低

    留学费用最低的国家 – 俄罗斯 、乌克兰、白俄罗斯 近几年不少人选择留学俄罗斯,主要是因为俄罗斯的留学申请条件相对于其他国家来说容易些,且费用实惠。那么问题来了,去俄罗…

    2022-11-24
  • 真假活性炭如何识别(活性炭真假检测)

    我们知道在废气、废水治理的过程中常常会用到活性炭。利用活性炭的吸附原理对废水、废气中的污染分子进行吸附。而活性炭给人的感觉都是黑色的,要么是蜂窝状、要么是柱状、其次就是粉末状。可活…

    2023-07-12
  • 鸿门宴项伯为什么保护刘邦脱险(刘邦为什么帮项伯脱险)

    这里是芒果论史! 项伯帮助刘邦脱险有两个原因,一个是为了他心中所谓的“义”,第二个就是为了个人利益。 具体分析且听我为大家慢慢道来。 项伯的“义” 楚地的风土人情导致当地之人都对“…

    2023-07-16
  • 晴雯麝月等人为何忌讳小红

    红楼梦由于年代的原因,很多当年使用的物件现在都少了或者没有用的,比如“汤婆子”。现代人乍看会迷惑,“汤婆子”是什么婆子?贾家那么多老妈子嬷嬷的,会是那样人么?细读原文会发现,“汤婆…

    2023-05-22
  • 腾讯qq音速什么时候退市(qq音速要回归了吗)

    11月22日,《QQ音速》运营团队发布了一则退市公告,公告称QQ音速游戏开发商已经解散了开发团队,腾讯与《QQ音速》游戏开发商的代理协议也将于2019年1月到期。《QQ音速》将从即…

    2023-06-11