跳到主要内容

吃透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;
}
};