欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

聊聊spring之贯穿全局的重要对象BeanDefinition

程序员文章站 2022-03-18 14:09:22
BeanDefinition 在 spring 中贯穿始终,spring 要根据 BeanDefinition 对象来实 例化 bean,只要把解析的标签,扫描的注解类封装成 BeanDefinition 对象,spring 才能实例化 bean beanDefinition 实现类 ChildBe ......
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 创建实例
 
聊聊spring之贯穿全局的重要对象BeanDefinition
beandefinition 中的属性
聊聊spring之贯穿全局的重要对象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 对象