一.java bean
java bean 是java开发中最经常接触的概念。
JavaBean是公共Java类,需要满足至少三个条件:
- 有一个public默认构造器(例如无参构造器,)
- 属性置成private,使用public 的get,set方法访问。
- 需要序列化。这个是框架,工具跨平台反映状态必须的
java编程思想,介绍javabean,最初是为Java GUI的可视化编程实现的.你拖动IDE构建工具创建一个GUI 组件(如多选框),其实是工具给你创建java类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来.《java 编程思想(第四版)》p823-824
一个简单的java bean定义示例:
package main.java.spring;
public class MyBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
二. spring中对bean的基本定义接口:BeanDefinition
2.1 BeanDefinition接口
spring中,定义了一个名为BeanDefinition的一个接口,包含了一些常用的bean的属性的get/set方法。比如我们常用到的以下bean属性:
包括:
是否延迟初始化LazyInit;
父定义ParentName;
bean定义的类名BeanClassName;
bean的作用域scope;
bean的依赖关系DependsOn;
bean是否用于自动装配其他bean对象AutowireCandidate;
bean是否作为自动装配对象isPrimary;
ban的工厂名 factoryBeanName;
bean的工厂方法名称:factoryMethodName
bean是否单例isSingleton
bean 是否原型isPrototype
bean 是否为抽象isAbstract
bean的角色role
bean的描述Description
所有spring框架中操作的bean对象,全部是实现了该接口的扩展类的对象。
2.2扩展了如下接口
BeanMetadataElement:获取配置资源方法的接口;
AttributeAccessor:属性存储器,提供了设置,获取,删除,查询是否包含属性,以及获取所有属性名方法的接口。
bean的接口定义扩展了以上两个基本功能接口,并且包含获取构造器值,属性值的方法,得到了BeanDefinition接口。
三. spring中对bean的基本定义类:AbstractBeanDefinition
spring中定义了bean的抽象类,实现了bean定义接口,
定义了bean的一些基本属性,实现了bean定义接口中属性相关的get/set功能。
并且定义了方法重载功能的实现:
通过引用MethodOverrides 实例。
定义类自动装配功能的实现。
Map<String, AutowireCandidateQualifier>,定义了bean中所有需要自动装配的属性成员。
同时实现了类的解析以及加载。
cloneBeanDefinition,复制bean的定义,留给子类实现。
实现了一些基本bean功能 如设置bean的构造器参数与属性成员。
组合了构造器参数类ConstructorArgumentValues,多个属性成员类MutablePropertyValues。
MutablePropertyValues:定义了bean类拥有的所有属性成员的列表,包含了一个对List<PropertyValue>的引用。列表中每一个实例代表一个属性成员的引用。同时实现了接口PropertyValues。
接口PropertyValues:定义了一系列多个属性成员对象的对外接口,包含各种操作。
PropertyValue:定义了单个属性成员的操作类。扩展了BeanMetadataAttributeAccessor类(本质上单个属性成员也可以是一个bean对象,包含自己的成员属性),增加了如图属性,并且重写了equals以及toString 和hash方法。
BeanMetadataAttributeAccessor:bean元数据存储器
元数据=bean定义文件资源+bean中定义的属性集合
1.是属性存储器AttributeAccessorSupport的子类,实现属性存储功能。一个bean也确实可以理解为一组属性的存储集合。
2.实现BeanMetadataElement,可以获取bean定义文件资源。
四 子类:
2. RootBeanDefinition rootbean定义
AbstractBeanDefinitiond的子类,扩展了如下功能
1.增添属性,存储构造器参数。
2.添加bean类型转换类型属性,用于向上,下转型
3.增加书否需要bean前置,后置处理属性(为aop)
4.增加bean拥有的成员属性,以及初始化方法,析构方法列表。