springboot-BeanDefinitionRegistry接口

BeanDefinitionRegistry接口:

用于注册BeanDefinition到容器中的接口类

 

实现类众多

抽象类:AbstractBeanDefinition

SpringBoot默认使用的实现类是:DefaultListableBeanFactory

 

主要接口方法:

1.registerBeanDefinition(注册BeanDefinition)

2.removeBeanDefinition(反注册BeanDefinition)

3.getBeanDefinition(从已注册列表中获取BeanDefinition)

4.containsBeanDefinition(查看注册列表中是否包含当前BeanDefinition)

 

我们用到最多的是registerBeanDefinition方法,这里就DefaultListableBeanFactory来详细分析下:

执行步骤如下:

1.首先校验beanName和BeanDefinition是否为空

2.如果instanceof AbstractBeanDefinition,则调用父类validate

3.从注册表中根据beanName获取已经注册的BeanDefinition,与目标BeanDefinition对比,如果不能覆写,则返回BeanDefinitionStoreException

4.如果注册表中还没有该beanName对应的BeanDefinition,需要刷新beanDefinitionMap beanDefinitionNames manualSingletonNames三个属性中数据

5.最后,如果满足其中一个条件:1.注册表中已有该beanName 2.该单例已被创建,则重置BeanDefinition,里面用到了递归,主要为了处理BeanDefinition的父子关系问题

你可能感兴趣的:(springboot)