一.java bean 




java bean 是java开发中最经常接触的概念。



JavaBean是公共Java类,需要满足至少三个条件:

  1. 有一个public默认构造器(例如无参构造器,)
  2. 属性置成private,使用public 的get,set方法访问。
  3. 需要序列化。这个是框架,工具跨平台反映状态必须的

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


javabean在哪创建 javabean如何创建_构造器



所有spring框架中操作的bean对象,全部是实现了该接口的扩展类的对象。


2.2扩展了如下接口




BeanMetadataElement:获取配置资源方法的接口;

javabean在哪创建 javabean如何创建_javabean在哪创建_02


AttributeAccessor:属性存储器,提供了设置,获取,删除,查询是否包含属性,以及获取所有属性名方法的接口。


javabean在哪创建 javabean如何创建_javabean在哪创建_03

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拥有的成员属性,以及初始化方法,析构方法列表。




javabean在哪创建 javabean如何创建_spring_04