Spring BeanDefinition

1 是什么

Spring中用来描述Bean的类,作用相当于模具,批量生产每一样东西时可以先制造模具,模具记录着尺寸,形状等详细信息,可以加快生产效率,BeanDefinition的作用也是类似的,记录着Bean的scope,lazy,class等信息,需要Bean对象时可以根据BeanDefinition记录的属性信息可以创建并初始化该Bean对象。

Spring的生命周期就是根据xml元数据配置+注解元数据配置+java Configuration元数据配置初始化BeanDefinition,并根据初始化的初始化BeanDefinition对象来实例化,初始化需要的java对象。

BeanDefinition的类结构图

2 BeanDefinition两个父接口

2.1 AttributeAccessor

用来操作描述BeanDefinition额外的元数据,这部分元数据使用Spring中的BeanDefinition描述不了的。

到底是描述Bean还是BeanDefinition的额外的元数据有点搞不清楚?

其实现类为AttributeAccessorSupport。

2.2 BeanMetadataElement

保存Bean Class在磁盘中文件的全路径信息,

其实现类为BeanMetadataAttributeAccessor

只是通过注解扫描到的Bean才有该属性值。

3 BeanDefinition的实现

不用方式注入的Bean生成的BeanDefinition对象的类型不同。

3.1 RootBeanDefinition

用途一:作为一个父BeanDefinition,让别的BeanDefinition继承

仅仅作为父BeanDefinition用途时没有设置BeanClass一定要设置Bean是抽象,在Spring的生命周期中会对子BeanDefinition和父BeanDefinition进行合并。

用途二:一个真实的BeanDefinition

作为真实的BeanDefinition时一定要指定BeanClass,并且不能设置Bean是抽象的。

不能作为子BeanDefinition出现,

3.2 ChildBeanDefinition

Spring2.5时首选的BeanDefinition,目前已经淘汰,使用时一定要指定父BeanDefinition的名称,只能作为子BeanDefinition存在。

3.2 GenericBeanDefinition

通过xml配置的Bean由XmlBeanDefinitionReader扫描生成GenericBeanDefinition对象。

通用的BeanDefinition对象,可以完全替代ChildrenBeanDefinition,但是不能完全替代RootBeanDefinition,因为在有父子BeanDefinition的情况下,合并完成的BeanDefinition对象是RootBeanDefinition。

3.3 ScannedGenericBeanDefinition

通过**@Component 注解配置的Bean由AnnotatedBeanDefinitionReader扫描生成ScannedGenericBeanDefinition**对象。

3.5 AnnotatedGenericBeanDefinition

配置元数据的方式采用Java Configuration时,描述配置类Bean的BeanDefinition对象以及在配置类中使用@Import导入的BeanDefinition对象为ConfigurationClassBeanDefinition对象。

3.5 ConfigurationClassBeanDefinition

配置元数据的方式采用Java Configuration时,在配置类中使用@Bean注入的BeanDefinition对象为ConfigurationClassBeanDefinition对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值