spring源码之 1.2 Spring中bean定义

一.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

转载自:https://www.zhihu.com/question/19773379;
http://stackoverflow.com/questions/1612334/difference-between-dto-vo-pojo-javabeans

一个简单的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定义文件资源。


AbstractBeanDefinition子类:

2. RootBeanDefinition rootbean定义

AbstractBeanDefinitiond的子类,扩展了如下功能
1.增添属性,存储构造器参数。
2.添加bean类型转换类型属性,用于向上,下转型
3.增加书否需要bean前置,后置处理属性(为aop)
4.增加bean拥有的成员属性,以及初始化方法,析构方法列表。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值