一.java bean
- 有一个public默认构造器(例如无参构造器,)
- 属性置成private,使用public 的get,set方法访问。
- 需要序列化。这个是框架,工具跨平台反映状态必须的
转载自:https://www.zhihu.com/question/19773379;
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接口
是否延迟初始化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
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定义文件资源。