BeanDefinition说明

BeanDefinition继承自AttributeAccessor, BeanMetadataElement两个顶层接口

AttributeAccessor 接口用于提供 BeanDefinition 的描述信息(而 BeanDefinition 是用于描述bean的信息)如用于描述 BeanDefinition 的 FULL 和 LITE 的属性就是设置在这里
BeanMetadataElement 接口提供了一个 geSource() 方法用于跟踪该 BeanDefinition 的来源信息

  • AbstractBeanDefinition 实现了 BeanDefinition
    • RootBeanDefinition
    • ChildBeanDefinition
    • GenericBeanDefinition
      • ScannedGenericBeanDefinition 同时实现了 AnnotatedBeanDefinition
      • AnnotatedGenericBeanDefinition 同时实现了 AnnotatedBeanDefinition
  • AnnotateBeanDefinition 继承自 BeanDefinition
  • 内部类 ConfigurationClassBeanDefinition 定义在 ConfigurationClassBeanDefinitionReader 中继承至 RootBeanDefinition 实现了 AnnotatedBeanDefinition
  • 内部类 ClassDerivedBeanDefinition 定义于 GenericApplicationContext 中
RootBeanDefinition
  • spring 刚刚启动时生成的几个默认的 BeanDefinition 都是 RootBeanDefinition
  • getMergeBeanDefinition 返回的都是 RootBeanDefinition ,即最终所有的 BeanDefinition 都会被转换成RootBeanDefinition
  • @Bean注解配置的 bean ,解析出来的 BeanDefinition 都是 RootBeanDefinition
ChildBeanDefinition
  • 当前版本已被废弃,spring 源码找不到对应代码,之所以保留目的是为了兼容某些第三方组件或者某些用户自定义扩展
GenericBeanDefinition
  • xml解析的BeanDefinition都是 GenericBeanDefinition (详见: BeanDefinitionReaderUtils.createBeanDefinition )
  • 注解配置(不包含 @Bean)的 BeanDefinition 都是 GenericBeanDefinition (详见其子类解析)
  • 替代 ChildBeanDefinition,按需设置 parent,而 ChildBeanDefinition 必须配置 parent。
子类解析
  • ScannedGenericBeanDefinition
    • 通过扫描方式( @Component 系列)加载的 BeanDefinition 都是 ScannedGenericBeanDefinition
  • AnnotateGenericBeanDefinition
    • AnnotatedBeanDefinitionReader.register 的 BeanDefinition 都是 AnnotatedGenericBeanDefinition
    • 通过 @Import 注解导入的 BeanDefinition 都是 AnnotatedGenericBeanDefinition (详见 ConfigurationClassBeanDefinitionReader.registerBeanDefinitionForImportedConfigurationClass)
  • ConfigurationClassBeanDefinition
    • 通过 @Bean 注解配置的 BeanDefinition 都是 ConfigurationClassBeanDefintion
  • ClassDerivedBeanDefinition
    • 通过 lambda 回调方式创建对象的方式声明为 ClassDerivedBeanDefinition
    • 其它语言的一些扩展衍生的 BeanDefinition
目的

spring定义了这么多类型的 BeanDefinition 目的是为了从不同维度解析 Bean,但是最终所有的 BeanDefinition 都要转换成 RootBeanDefinition 进行统一
把简单留给了别人,把复杂留给了自己

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BeanDefinitionSpring中的一个核心概念,它表示了一个Bean的定义。在Spring中,根据BeanDefinition来创建Bean对象。BeanDefinition具有很多属性用来描述Bean的信息和配置。 AnnotatedBeanDefinition是AnnotatedBeanDefinition接口的实现类,表示注解的BeanDefinition。它包含了注解元数据和基本类元数据的信息。AnnotatedBeanDefinition有两个主要的实现类:AnnotatedGenericBeanDefinition和ScannedGenericBeanDefinition。 RootBeanDefinition代表普通的BeanDefinition实现,通过直接实例化BeanDefinition对象来创建。ChildBeanDefinition代表可以设置父BeanDefinition的子BeanDefinition。GenericBeanDefinition代表一般的BeanDefinition,AnnotatedGenericBeanDefinition和ScannedGenericBeanDefinition都是它的两个主要实现类。 综上所述,BeanDefinitionSpring中用来描述Bean的定义的概念,它包含了Bean的各种属性和配置信息。AnnotatedBeanDefinition是注解的BeanDefinition的实现类,它包含了注解元数据和类元数据的信息。RootBeanDefinition和ChildBeanDefinitionBeanDefinition的不同实现方式,GenericBeanDefinition是一般的BeanDefinition,它的两个主要实现类是AnnotatedGenericBeanDefinition和ScannedGenericBeanDefinition。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [BeanDefinition](https://blog.csdn.net/xxssyyyyssxx/article/details/124819785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值