从这个继承图可以看出,这三个类都是继承与 AbstractBeanDefinition,下面说说这三个类的区别。

RootBeanDefinition、ChildBeanDefinition

  RootBeanDefinition可以单独作为一个BeanDefinition,也可以作为其他BeanDefinition的父类。但是他不能作为其他BeanDefinition的子类(可以去看源码,在setParentName的时候,会抛出一个异常)。

  ChildBeanDefinition相当于一个子类,不可以单独存在,必须要依赖一个父BeanDetintion。(最大的区别他的parentName属性是通过构造方法设置的,而且并没有提供一个无参构造方法给我们。)

 // 演示代码
public class AdminService {private String name;private Integer age;public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "AdminService{" + "name='" + name + '\'' + ", age=" + age + '}';}
}public class TestDemo {public static void main(String[] args) {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();// 自定义BeanDefinition,给其设置属性值,并且注册到Spring当中。RootBeanDefinition rootBeanDefinition = new RootBeanDefinition();rootBeanDefinition.getPropertyValues().add("name", "micheal");rootBeanDefinition.setBeanClass(AdminService.class);// 注意,这里必须要提供一个父BeanDefinitionChildBeanDefinition childBeanDefinition = new ChildBeanDefinition("a1");childBeanDefinition.getPropertyValues().add("age", 18);applicationContext.registerBeanDefinition("a1", rootBeanDefinition);applicationContext.registerBeanDefinition("a2", childBeanDefinition);applicationContext.refresh();
     System.out.println("a1:" + applicationContext.getBean("a1"));     System.out.println("a2:" + applicationContext.getBean("a2"));
} }

=====================================输出结果====================================

a1:AdminService{name='micheal', age=null}
a2:AdminService{name='micheal', age=18}

RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition的区别相关推荐

  1. Spring源码解析之 Bean与BeanDefinition详解

    文章目录 Spring解决的核心问题 Bean与BeanDefinition 代码验证BeanDefinition 代码运行测试 Spring容器主要流程 与BeanDefinition相关的类 At ...

  2. AbstractBeanDefinition解读

    AbstractBeanDefinition解读 AbstractBeanDefinition介绍 AbstractBeanDefinition是实现了BeanDefinition接口的一个抽象类,是 ...

  3. spring源码系列一--BeanDefinition

    如果说java是由对象组成,那么spring-framework框架可以说是由BeanDefinition所构成.BeanDefinitiion其实是spring中的顶级接口,我们在阅读源码之前必须要 ...

  4. spring源码解析五

    2019独角兽企业重金招聘Python工程师标准>>> 1.创建用于承载属性的BeanDefinition 这是一个接口,在spring中存在三种实现:RootBeanDefinit ...

  5. spring beans源码解读之--Bean的定义及包装

    bean的定义,包装是java bean的基础.再怎么强调它的重要性都不为过,因此深入 了解这块的代码对以后的代码研究可以起到事半功倍的功效. 1. Bean的定义BeanDefinition 1.1 ...

  6. Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition

    概述 AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公共逻辑实现. AbstractBeanDefinition中并没有太复 ...

  7. BeanDefinition的概述及使用

    文章目录 前言 BeanDefinition类的属性释义 BeanDefinition的分类 BeanDefinition的使用 写在前面 注:本文章使用的 SpringBoot 版本为 2.2.4. ...

  8. BeanDefinition用法

    BeanDefinition 作用 一个BeanDefinition描述了一个bean的实例,包括属性值,构造方法参数值和继承自它的类的更多信息.BeanDefinition仅仅是一个最简单的接口,主 ...

  9. 什么是 BeanDefinition?

    BeanDefinition 是定义 Bean 的配置元信息接口,包含: Bean 的类名 设置父 bean 名称.是否为 primary. Bean 行为配置信息,作用域.自动绑定模式.生命周期回调 ...

最新文章

  1. 专访英特尔AIPG全球研究负责人Casimir Wierzynski:物理学、隐私和大脑将根本性塑造AI
  2. jenkins构建一个maven项目[五]
  3. lucene 范围过滤
  4. 常考数据结构和算法:合并有序链表
  5. 【Linux】 linux的进程系统一点补充
  6. 数据传输示例 Moves.asm
  7. 【darknet速成】Darknet图像分类从模型自定义到测试
  8. 在建工程的管理是怎样在总帐中实现
  9. 好程序员HTML5前端教程-css的引入方式和选择器
  10. sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础
  11. CodeForces - 641ELittle Artem and Time Machine——map+树状数组
  12. 小程序基础 - wafer2 - PHP - 后台和前台 - 利用对象数组来传递表单数组的正确方法 - 下载部分(服务器到微信)
  13. matplotlib 设置水平线、垂直线
  14. python实现一个简单的【图像中物体坐标】标注小工具
  15. 定时器之多层级时间轮
  16. 终于找到了,中国知网免费下载论文诀窍!
  17. discuz分类信息模版PHP,Discuz 社区分类信息模板使用教程
  18. 《Intel汇编语言程序设计》环境搭建
  19. SQL案例分析之部分查询和全部查询
  20. EB-Boost :智慧景区共享单车中长期投放量精准预测方法

热门文章

  1. 考研计算机报录比最高的手机,考研 | 报录比最高专业TOP10,就离谱!
  2. 2019HDU多校第七场 HDU6656 Kejin Player H 【期望递归】
  3. 体验真真的webQQ
  4. 面试(hardware)
  5. NP路由器——OE要点整理
  6. Windows下配置Git连接上github, 并将本地文件夹同步(加入了个人注释)
  7. Android VR入门文章
  8. 【Altium designer】新手入门(PCB layout设计)
  9. HDU 1002 A+BII大数
  10. html css 奥运五环,用css写一个有趣的奥运五环~。