Spring中的BeanDefinition

Spring bean的建模对象----BeanDefinition
在Spring的容器中,建模一个对象,不单单是实例化出来Class,因为还需要Bean的作用域,Bean的模型注入,是否懒加载等信息。Class是无法抽象出来的。所以需要BeanDefinition类来抽象出这些信息。
SpringBean的实例化的过程(Spring是跟着路神的讲解学的,图片也是盗用路神的
链接:https://me.csdn.net/java_lyvee)
在这里插入图片描述
在Spring中有几个不同类型的BeanDefinition来存储Spring中扫描出来的类信息,各种的BeanDefinition的关系图如下:
beanDefinition关系图

BeanDefinition:

接口,BD的顶级类。有抽象实现类AbstractBeanDefinition和三个具体的实现子类GenericBeanDefinition、RootBeanDefinition、ChildBeanDefinition

GenericBeanDefinition:

从spring 2.5 开始,提供了一个更好的注册bean definition类GenericBeanDefinition,它支持动态定义父依赖,方法是GenericBeanDefinition.setParentName(java.lang.String),GenericBeanDefinition可以有效的替代ChildBeanDefinition的绝大分部使用场合。所以ChildBeanDefinition几乎被弃用。

RootBeanDefinition

一个RootBeanDefinition定义表明它是一个可合并的bean definition:即在spring beanFactory运行期间,可以返回一个特定的bean。RootBeanDefinition可以作为一个重要的通用的bean definition 视图。
RootBeanDefinition用来在配置阶段进行注册bean definition。然后,从spring 2.5后,编写注册bean definition有了更好的的方法:GenericBeanDefinition。GenericBeanDefinition支持动态定义父类依赖,而非硬编码作为root bean definition。在Spring执行Bean的实例化的阶段的过程中第三次调用了后置处理器的时候就是子类GenericBeanDefinition向上合并为RootBeanDefinition。

ChildBeanDefinition

ChildBeanDefinition是一种bean definition,它可以继承它父类的设置,即ChildBeanDefinition对RootBeanDefinition有一定的依赖关系。
ChildBeanDefinition从父类继承构造参数值,属性值并可以重写父类的方法,同时也可以增加新的属性或者方法。(很少使用)

AnnotatedGenericBeanDefinition

继承了GenericBeanDefinition 用来处理注解类,注册为BeanDefinition,在使用了AnnotationConfigApplicationContext启动Spring并且使用AppConfig做为注册类的时候,是使用AnnotatedGenericBeanDefinition来保存AppConfig的内容。所以在获取扫描路径的时候,可以根据AnnotatedGenericBeanDefinition找到该全配置类。

ScannedGenericBeanDefinition

继承了GenericBeanDefinition来处理注解扫描出来的类,注册为BeanDefinition,在Spring启动之后,根据AppConfig提供的路径来扫描出对应的类文件做解析之后,使用ScannedGenericBeanDefinition保存被解析类的具体的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值