吃透Spring源码(五):spring中Beanefinition完全解析
大家用过spring的应该都知道BeanDefinition是记录bean的定义信息的,但是我们看源码时会发现,源码中通过BeanDefinition接口派生出来好多类,比如GenericBeanDefinition,AnnotatedGenericBeanDefinition,RootBeanDefinition等等,那么他们之间有什么区别,都是在什么情况下用到的呢?这篇文章就带大家一起探讨。
1,BeanDefinition常用类关系图

2,BeanDefinition接口
BeanDefinition是一个接口,定义了修改和获取Bean属性值和元数据信息。在DefaultListableBeanFactory中定义了BeanDefinitionMap来记录解析的BeanDefinition,定义了beanDefinitionNames来记录BeanDefinition名字列表:
/** Map of bean definition objects, keyed by bean name. */
private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
/** List of bean definition names, in registration order. */
private volatile List<String> beanDefinitionNames = new ArrayList<>(256);
3,AbstractBeanDefinition
new AbstractBeanDefinition() {
@Override
public void setParentName(String parentName) {
}
@Override
public String getParentName() {
return null;
}
@Override
public AbstractBeanDefinition cloneBeanDefinition() {
return null;
}
};