Spring容器DefaultListableBeanFactory
概览
DefaultListableBeanFactory作为Spring中ConfigurableListableBeanFactory和BeanDefinitionRegistry的默认实现,是一个成熟的,基于BeanDefinition定义元数据,通过后置处理器可进行扩展的容器。由于DefaultListableBeanFactory的源码及层级关联关系及其复杂,一篇文章不可能详尽解释所有的细节,我们把主脉络解释清楚,主结构理解透彻,对spring的理解也能提升很多,首先我们来理一下DefaultListableBeanFactory的类层次结构,如下图所示:层级结构源代码如下所示:
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {
// 省略了具体实现
}
其中ConfigurableListableBeanFactory接口的层次信息,我们在 Spring容器BeanFactory概览中已经介绍过了。下面介绍一下我们陌生的接口
AliasRegistry:
public interface AliasRegistry {
void registerAlias(String name, String alias);
void removeAlias(String alias);
boolean isAlias(String name);
String[] getAliases(String name);
}
BeanDefinitionRegistry:
public interface BeanDefinitionRegistry extends AliasRegistry {
void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException;
void removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;
boolean containsBeanDefinition(String beanName);
String[] getBeanDefinitionNames();
int getBeanDefinitionCount();
boolean isBeanNameInUse(String beanName);
}
SingletonBeanRegistry:
public interface SingletonBeanRegistry {
void registerSingleton(String beanName, Object singletonObject);
Object getSingleton(String beanName);
boolean containsSingleton(String beanName);
String[] getSingletonNames();
int getSingletonCount();
Object getSingletonMutex();
}
这三个接口都属于注册模