前言:学习GenericBeanDefinition,有了AbstractBeanDefinition的基础后,这个就很简单
简介
类图如下
GenericBeanDefinition是spring2.5版本后的 一站式Bean定义组件,其继承了AbstractBeanDefinition抽象类,bean的相关属性均是在了AbstractBeanDefinition定义,GenericBeanDefinition在继承的基础上重写了一定的方法,从而可以满足任何要求的Bean定义,读取xml或注解配置后生成bean的就是GenericBeanDefinition。
GenericBeanDefinition、RootBeanDefinition、ChildBeanDefinition这个类均能表示bean,其关系,个人理解就是普通人(通用bean)、父亲(Root bean)、孩子(child bean)的关系,都是人(bean),GenericBeanDefinition是通用的表示bean的一种方式,RootBeanDefinition、ChildBeanDefinition则是偏向于表示有父子关系的bean
源码分析
首先GenericBeanDefinition非常简单,因为这里用到了继承机制,大部分的属性、方法都是在AbstractBeanDefinition等父类中定义,所以这里就直接看所有源码了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| public class GenericBeanDefinition extends AbstractBeanDefinition {
private String parentName;
public GenericBeanDefinition() { super(); }
public GenericBeanDefinition(BeanDefinition original) { super(original); }
@Override public void setParentName(String parentName) { this.parentName = parentName; }
@Override public String getParentName() { return this.parentName; }
@Override public AbstractBeanDefinition cloneBeanDefinition() { return new GenericBeanDefinition(this); }
@Override public boolean equals(Object other) { return (this == other || (other instanceof GenericBeanDefinition && super.equals(other))); }
@Override public String toString() { StringBuilder sb = new StringBuilder("Generic bean"); if (this.parentName != null) { sb.append(" with parent '").append(this.parentName).append("'"); } sb.append(": ").append(super.toString()); return sb.toString(); }
}
|