BeanDefinition 在 spring 中贯穿始终,spring 要根据 BeanDefinition 对象来实
例化 bean,只要把解析的标签,扫描的注解类封装成 BeanDefinition 对象,spring
才能实例化 bean
beanDefinition 实现类
ChildBeanDefinition, GenericBeanDefinition, RootBeanDefinition
ChildBeanDefinition
ChildBeanDefinition 是一种 bean definition,它可以继承它父类的设置,即
ChildBeanDefinition 对 RootBeanDefinition 有一定的依赖关系。
ChildBeanDefinition 从父类继承构造参数值,属性值并可以重写父类的方法,同
时也可以增加新的属性或者方法。(类同于 java 类的继承关系)。若指定初始化方
法,销毁方法或者静态工厂方法,ChildBeanDefinition 将重写相应父类的设置。
depends on,autowire mode,dependency check,sigleton,lazy init 一般由子类
自行设定
GenericBeanDefinition
注意:从 spring 2.5 开始,提供了一个更好的注册 bean definition 类
GenericBeanDefinition,它支持动态定义父依赖,方法是
GenericBeanDefinition.setParentName(java.lang.String),GenericBeanDefinition 可
以有效的替代 ChildBeanDefinition 的绝大分部使用场合。GenericBeanDefinition 是一站式的标准 bean definition,除了具有指定类、可
选的构造参数值和属性参数这些其它 bean definition 一样的特性外,它还具有通
过 parenetName 属性来灵活设置 parent bean definition。
通常, GenericBeanDefinition 用来注册用户可见的 bean definition(可见的
bean definition 意味着可以在该类 bean definition 上定义 post-processor 来对 bean
进行操作,甚至为配置 parent name 做扩展准备)。RootBeanDefinition /
ChildBeanDefinition 用来预定义具有 parent/child 关系的 bean definition。
RootBeanDefinition
一个 RootBeanDefinition 定义表明它是一个可合并的 bean definition:即在
spring beanFactory 运行期间,可以返回一个特定的 bean。RootBeanDefinition 可
以作为一个重要的通用的 bean definition 视图。
RootBeanDefinition 用来在配置阶段进行注册 bean definition。然后,从 spring
2.5 后,编写注册 bean definition 有了更好的的方法:GenericBeanDefinition。
GenericBeanDefinition 支持动态定义父类依赖,而非硬编码作为 root bean
definition。
GenericBeanDefinition 创建实例
 

BeanDefinition 中的属性

(1)、id:Bean 的唯一标识名。它必须是合法的 XMLID,在整个 XML 文档中唯一。
(2)、name:用来为 id 创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分
开。
(3)、class:用来定义类的全限定名(包名+类名)。只有子类 Bean 不用定义该属性。
(4)、parent:子类 Bean 定义它所引用它的父类 Bean。这时前面的 class 属性失效。子类 Bean 会继承
父类 Bean 的所有属性,子类 Bean 也可以覆盖父类 Bean 的属性。注意:子类 Bean 和父类 Bean 是同一
个 Java 类。
(5)、abstract(默认为”false”):用来定义 Bean 是否为抽象 Bean。它表示这个 Bean 将不会被实
例化,一般用于父类 Bean,因为父类 Bean 主要是供子类 Bean 继承使用。
(7)、lazy-init(默认为“default”):用来定义这个 Bean 是否实现懒初始化。如果为“true”,它将
在 BeanFactory 启动时初始化所有的 SingletonBean。反之,如果为“false”,它只在 Bean 请求时才开
始创建 SingletonBean。
(8)、autowire(自动装配,默认为“default”):它定义了 Bean 的自动装载方式。
1、“no”:不使用自动装配功能。2、“byName”:通过 Bean 的属性名实现自动装配。
3、“byType”:通过 Bean 的类型实现自动装配。
4、“constructor”:类似于 byType,但它是用于构造函数的参数的自动组装。
5、“autodetect”:通过 Bean 类的反省机制(introspection)决定是使用“constructor”
还是使用“byType”。
(10)、depends-on(依赖对象):这个 Bean 在初始化时依赖的对象,这个对象会在这个 Bean 初始
化之前创建。
(11)、init-method:用来定义 Bean 的初始化方法,它会在 Bean 组装之后调用。它必须是一个无参数
的方法。
(12)、destroy-method:用来定义 Bean 的销毁方法,它在 BeanFactory 关闭时调用。同样,它也必
须是一个无参数的方法。它只能应用于 singletonBean。
(13)、factory-method:定义创建该 Bean 对象的工厂方法。它用于下面的“factory-bean”,表示
这个 Bean 是通过工厂方法创建。此时,“class”属性失效。
(14)、factory-bean:定义创建该 Bean 对象的工厂类。如果使用了“factory-bean”则“class”属性
失效。
(15)、autowire-candidate:采用 xml 格式配置 bean 时,将<bean/>元素的 autowire-candidate
属性设置为 false,这样容器在查找自动装配对象时,将不考虑该 bean,即它不会被考虑作为其它 bean
自动装配的候选者,但是该 bean 本身还是可以使用自动装配来注入其它 bean 的。
(16)、MutablePropertyValues:用于封装<property>标签的信息,其实类里面就是有一个 list,list
里面是 PropertyValue 对象,PropertyValue 就是一个 name 和 value 属性,用于封装<property>标签
的名称和值信息
(17)、ConstructorArgumentValues:用于封装<constructor-arg>标签的信息,其实类里面就是有
一个 map,map 中用构造函数的参数顺序作为 key,值作为 value 存储到 map 中
(18)、MethodOverrides:用于封装 lookup-method 和 replaced-method 标签的信息,同样的类里
面有一个 Set 对象添加 LookupOverride 对象和 ReplaceOverride 对象
 
 

聊聊spring之贯穿全局的重要对象BeanDefinition的更多相关文章

  1. 在Spring应用中创建全局获取ApplicationContext对象

    在Spring应用中创建全局获取ApplicationContext对象 1.需要创建一个类,实现接口ApplicationContextAware的setApplicationContext方法. ...

  2. 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor

    #### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...

  3. 从架构演进的角度聊聊Spring Cloud都做了些什么?

    Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...

  4. 【小家Spring】聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)

    每篇一句 唯有热爱和坚持,才能让你在程序人生中屹立不倒,切忌跟风什么语言或就学什么去~ 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- 属性访问器PropertyAccessor和 ...

  5. 聊聊spring事务失效的12种场景,太坑了

    前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据 ...

  6. spring data mongodb中,如果对象中的属性不想加入到数据库字段中

    spring data mongodb中,如果对象中的属性不想加入到数据库字段中,可加@Transient注解,声明为透明属性 spring data mongodb 官网帮助文档 http://ww ...

  7. 聊聊 Spring Boot 2.x 那些事儿

    本文目录: 即将的 Spring 2.0 - Spring 2.0 是什么 - 开发环境和 IDE - 使用 Spring Initializr 快速入门 Starter 组件 - Web:REST ...

  8. 朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件

    朱晔和你聊Spring系列S1E1:聊聊Spring家族的几大件 [下载本文PDF进行阅读] Spring家族很庞大,从最早先出现的服务于企业级程序开发的Core.安全方面的Security.到后来的 ...

  9. 从架构演进的角度聊聊Spring Cloud都做了些什么

    1.从架构演进的角度聊聊Spring Cloud都做了些什么?2.中小型互联网公司微服务实践-经验和教训3.Spring Cloud在国内中小型公司能用起来吗?

随机推荐

  1. MySQL 高可用之主从复制

    MySQL主从复制简介 Mysql的主从复制方案,都是数据传输的,只不过MySQL无需借助第三方工具,而是自带的同步复制功能,MySQL的主从复制并不是磁盘上文件直接同步,而是将binlog日志发送给 ...

  2. STM8 关闭PWM输出后的电平输出问题解决

    STM系列的单片机PWM输出如果被关断比如用TIM1_CtrlPWMOutputs进行停止输出后,电平的高低处于不确定的状态. 他取决于: 1.GPIO初始化的特性 2.关断那一刻时的电平 3.CCM ...

  3. STM32 调试 24L01 心得

    大部分使用STM32开发nrf24L01的用户基本都是照搬常见的几个开发板的源代码,在这里我做一些总结: 1.源代码中在while(1)的循环中有 NRF24L01_TX_Mode();或NRF24L ...

  4. 一个支持高网络吞吐量、基于机器性能评分的TCP负载均衡器gobalan

    一个支持高网络吞吐量.基于机器性能评分的TCP负载均衡器gobalan 作者最近用golang实现了一个TCP负载均衡器,灵感来自grpc.几个主要的特性就是: 支持高网络吞吐量 实现了基于机器性能评 ...

  5. c++中静态成员函数

    静态成员函数 静态成函数和静态成员数据相同,他们都属于某一个类的静态成员而不是某一个对象的成员. 静态数据成员的使用方法和注意事项 1.静态数据成员在定义或说明时前面加上关键字static 2.初始化 ...

  6. 3.部署场景1:带有遗留的Open vSwitch

    部署场景1:带有遗留的Open vSwitch 此场景描述了使用带有Open vSwitch(OVS)的ML2插件的OpenStack网络服务的(基本)实现. 遗留的实现通过为普通用户提供一种方法来管 ...

  7. 物流跟踪API-快递单订阅

    上一篇文章我们讲解了轨迹查询的接口,通过快递鸟接口可以实现实时查询物流轨迹,这次给大家推荐订阅服务功能. 为了更好的理解订阅服务,我们来做个对比, 即时查询是主动查询物流轨迹,需要我们主动调用接口才能 ...

  8. OS课程 ucore_lab2实验报告

    练习零:填写已有实验    本实验依赖实验1.请把你做的实验1的代码填入本实验中代码中有"LAB1"的注释相应部分.提示:可采用diff和patch工具进行半自动的合并(merge ...

  9. springboot整合druid和配置资源监控

    1.添加依赖,在maven repository中搜索 <dependency> <groupId>com.alibaba</groupId> <artifa ...

  10. 洛谷P3177 [HAOI2015]树上染色(树形dp)

    题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之 ...