RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition的区别
从这个继承图可以看出,这三个类都是继承与 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的区别相关推荐
- Spring源码解析之 Bean与BeanDefinition详解
文章目录 Spring解决的核心问题 Bean与BeanDefinition 代码验证BeanDefinition 代码运行测试 Spring容器主要流程 与BeanDefinition相关的类 At ...
- AbstractBeanDefinition解读
AbstractBeanDefinition解读 AbstractBeanDefinition介绍 AbstractBeanDefinition是实现了BeanDefinition接口的一个抽象类,是 ...
- spring源码系列一--BeanDefinition
如果说java是由对象组成,那么spring-framework框架可以说是由BeanDefinition所构成.BeanDefinitiion其实是spring中的顶级接口,我们在阅读源码之前必须要 ...
- spring源码解析五
2019独角兽企业重金招聘Python工程师标准>>> 1.创建用于承载属性的BeanDefinition 这是一个接口,在spring中存在三种实现:RootBeanDefinit ...
- spring beans源码解读之--Bean的定义及包装
bean的定义,包装是java bean的基础.再怎么强调它的重要性都不为过,因此深入 了解这块的代码对以后的代码研究可以起到事半功倍的功效. 1. Bean的定义BeanDefinition 1.1 ...
- Spring的bean定义 2 : 通用bean定义逻辑 -- AbstractBeanDefinition
概述 AbstractBeanDefinition是最终全功能BeanDefinition实现类的基类,也就是这些类的共同属性和公共逻辑实现. AbstractBeanDefinition中并没有太复 ...
- BeanDefinition的概述及使用
文章目录 前言 BeanDefinition类的属性释义 BeanDefinition的分类 BeanDefinition的使用 写在前面 注:本文章使用的 SpringBoot 版本为 2.2.4. ...
- BeanDefinition用法
BeanDefinition 作用 一个BeanDefinition描述了一个bean的实例,包括属性值,构造方法参数值和继承自它的类的更多信息.BeanDefinition仅仅是一个最简单的接口,主 ...
- 什么是 BeanDefinition?
BeanDefinition 是定义 Bean 的配置元信息接口,包含: Bean 的类名 设置父 bean 名称.是否为 primary. Bean 行为配置信息,作用域.自动绑定模式.生命周期回调 ...
最新文章
- 专访英特尔AIPG全球研究负责人Casimir Wierzynski:物理学、隐私和大脑将根本性塑造AI
- jenkins构建一个maven项目[五]
- lucene 范围过滤
- 常考数据结构和算法:合并有序链表
- 【Linux】 linux的进程系统一点补充
- 数据传输示例 Moves.asm
- 【darknet速成】Darknet图像分类从模型自定义到测试
- 在建工程的管理是怎样在总帐中实现
- 好程序员HTML5前端教程-css的引入方式和选择器
- sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础
- CodeForces - 641ELittle Artem and Time Machine——map+树状数组
- 小程序基础 - wafer2 - PHP - 后台和前台 - 利用对象数组来传递表单数组的正确方法 - 下载部分(服务器到微信)
- matplotlib 设置水平线、垂直线
- python实现一个简单的【图像中物体坐标】标注小工具
- 定时器之多层级时间轮
- 终于找到了,中国知网免费下载论文诀窍!
- discuz分类信息模版PHP,Discuz 社区分类信息模板使用教程
- 《Intel汇编语言程序设计》环境搭建
- SQL案例分析之部分查询和全部查询
- EB-Boost :智慧景区共享单车中长期投放量精准预测方法