Spring源码系列(5)- BeanDefinition的注册

Spring源码系列(5)- BeanDefinition的注册

前言

本章接着上篇,主要来介绍BeanDefinition的注册,本篇比较重要。

BeanDefinition 这个类是spring的前奏中比较重要的一环,这个类从字面意思,就很清楚,Bean定义的接口,啥意思呢?就是所有的自定义普通bean类,只要想注册到spring容器中,首先得转换成spring认识的类,也就是BeanDefinition,这个里面会包含bean的基础信息,比如类的属性、是否有依赖,依赖的类是什么,是否有父类等等这些。

好,下边进入正题。

注册

spring每次注册前,总会做大量的工作,自然而然BeanDefinition的注册也不例外,我们来看源码。

我们接着上一篇的,进入红框的方法。
在这里插入图片描述
点进去后,发现是一个接口,找找实现类,这里默认实现类是DefaultListableBeanFactory。

由于这个类比较重要,所以这里将DefaultListableBeanFactory这个类的作用讲一下。

DefaultListableBeanFactory

DefaultListableBeanFactory是spring中加载bean的核心部分,是spring注册和加载bean的默认实现。

那它与之前讲的XMLBeanFactory什么区别?
XmlBeanFactory是DefaultListableBeanFactory的子类,是对此类的扩展,比如可以通过XmlBeanDefinitionReader来读取xml文件,对于注册以及获取Bean,还是通过父类DefaultListableBeanFactory来实现的。

如果看DefaultListableBeanFactory类图还是很复杂的,不建议大家直接看类图,容易绕晕。

好了,我们继续往下讲,说了半天,还没有进入今天的正题😓

在这里插入图片描述
在这里插入图片描述
这里还是比较简单的,我们来分析一下。

1、首先,第一步是来验证methodOverrides属性,是在父类AbstractBeanDefinition进行验证的。
在这里插入图片描述
2、判断BeanDefinition是否已经注册,
如果存在,则进行相应的验证,再次放入map中。
在这里插入图片描述
如果不存在,则把beanDefinition缓存到map中。
在这里插入图片描述
这里有一个hasBeanCreationStarted()方法,hasBeanCreationStarted()方法是用来检查工厂是判断bean的创建是否已经开始,这个判断是有alreadyCreated这个集合来判断,后续会讲到这个集合是何时放这些值的。这个方法不是很重要。不用看也可以。

我们重点看看两个集合,一个是beanDefinitionMap,一个是beanDefinitionNames,后续会用到这两块。

beanDefinitionMap 是key-value的map,key就是bean name,value就是对应转换后的BeanDefinition.

beanDefinitionNames这个是一个list,存放beanName的,bean实例化的时候会用到。后边讲到的时候,我们再提。

好了,这就是本章的内容了,下一篇我们开始进入bean的获取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值