2019.10.17笔记——BeanDefinition的分析

BeanDefinition

类关系图

在这里插入图片描述

BeanDefinition的实现类

AbstractBeanDefinition

AbstractBeanDefinition是一个抽象类,这个抽象类相当于所有BeanDefinition的模板类,其之类基本包括全部的BeanDefinition实现类,其中GenericBeanDefinition可以描述现在版本的所有BeanDefinition,它的子类分别表示不同的类型的BeanDefinition。

这个抽象类中实现了一些子类的通用方法,减少了代码的复写。

ChildBeanDefinition和RootBeanDefinition

AbstractBeanDefinition还有两个子类ChildBeanDefinition和RootBeanDefinition现在的版本基本不再使用,在2.5之前还没有GenericBeanDefinition就是由这两个实现类来描述BeanDefinition的。

在BeanDefinition中有这么一个方法,是判断是不是抽象的,我们知道如果类是抽象的,那么根本不能实例化,那么这个bd还有什么意义呢?
在这里插入图片描述
其实这个是为ChildBeanDefinition和RootBeanDefinition开发的,因为RootBeanDefinition可以作为一个抽象的BeanDefinition,只需要设置一些公共的属性,ChildBeanDefinition可以作为子BeanDefinition接收RootBeanDefinition中设置的属性。
在这里插入图片描述
当然也可以在在xml中也可以设置
在这里插入图片描述

  • RootBeanDefinition因为它的setParentName方法会直接抛出异常,所以RootBeanDefinition不能作为子BeanDefinition,但可以作为一个独立的BeanDefinition或者父BeanDefinition存在。

  • ChildBeanDefinition因为没有默认的无参构造方法,所有的构造方法都需要设置它的父BeanDefinition,所以ChildBeanDefinition必须作为一个子BeanDefinition存在。

GenericBeanDefinition

  • GenericBeanDefinition既可以作为独立的BeanDefinition存在,也可以作为父BeanDefinition存在,同样也可以作为子BeanDefinition存在。

不过在spring初始化bd的时候,在聚合子BeanDefinition和父BeanDefinition的时候,最后还是通过RootBeanDefinition接收的,所以RootBeanDefinition在当前的版本还是有所使用的

ConfigurationClassBeanDefinition和AnnotatedGenericBeanDefinition

还有一个重要的BeanDefinition的实现类ConfigurationClassBeanDefinition,它继承自RootBeanDefinition。

GenericBeanDefinition同样有两个重要子类AnnotatedGenericBeanDefinition和ScannedGenericBeanDefinition。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值