Spring源码阅读 --BeanDefinition

Spring是这样描述BeanDefinition的:

一个BeanDefinition描述了一个bean实例,拥有属性值,构造参数值和具体实现提供的其他信息。
这仅仅只是一个最小接口:主要的目的是允许BeanFactoryPostProcessor (例如PropertyPlaceholderConfigurer)去内省和修改属性值和其他bean元数据。

然后我们查看BeanDefinition接口的结构类图:


我们可以看到BeanDefinition有一个抽象子类AbstractBeanDefinition,它没有抽象方法但是却被声明为abstract。

这是Spring为BeanDefinition提供的一个基类用于提供一些通用的属性和方法。

接下来它有三个具体的实现类:

  • ChildBeanDefinition
  • GenericBeanDefinition
  • RootBeanDefinition

ChildBeanDefinition

  可以让子Bean定义拥有从父母哪里继承配置的能力。相应的,子Bean定义有一个固定的依赖--他们的父bean定义。

  一个子bean定义将继承父母的构造参数值、属性值和方法覆盖并且可以选择的增加新的值。 如果初始化方法、销毁方法或者静态工厂方法已经指定了,那么将覆盖父bean定义中的相关配置。 子bean定义保留的配置将是:依赖、自动装配模式、依赖检查、单例和延迟加载。

注意: 自从Spring 2.5之后, 编程的方式注册bean定义的优选方法是使用 GenericBeanDefinition类, 允许使用 GenericBeanDefinition.setParentName方法动态的定义父依赖。 在大多数场景下可以 有效的取代ChildBeanDefinition类。

GenericBeanDefinition

  GenericBeanDefinition是一个定义标准的bean定义的一站式服务。

  像任何Bean定义,它允许指定一个类、可选的构造参数值和属性值。 除此之外可以通过配置"parentName"属性来灵活地指定从一个父Bean定义中派生。 
  通常来说,使用GenericBeanDefinition类为了注册一个用户可见的bean定义(后置处理器可能会操作它, 甚至可能重新配置父母的名字)。如果父/子关系是预设的建议使用RootBeanDefinition / ChildBeanDefinition。


RootBeanDefinition

  RootBeanDefinition描述了Spring BeanFactory运行时合并后的特定Bean定义。

  它可能来源于多个原始Bean定义(继承自其他的bean定义,通常被注册为GenericBeanDefinitions)。RootBeanDefinition从本质上将是运行时统一的Bean定义视图。 
  在配置阶段,RootBeanDefinition也可能用于注册独立的bean定义。然而,自从Spring2.5依赖,编程地注册bean定义建议使用 GenericBeanDefinition类。GenericBeanDefinition在允许动态定义父依赖而不是硬编码作为RootBeanDefinition方面有优势。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值