本文我们来了解下 spring 中 BeanDefinition 的注册
在 spring 中对 bean 的注册主要有两种方式:
- 第一种是通过配置来注册我们的bean,对应的方法是 DefaultListableBeanFactory 里的 registerBeanDefinition() 方法
- 第二种是直接注册一个单例 bean,对应的方法则是 DefaultListableBeanFactory 里的 registerSingleton() 方法
下面我们分别来看看这两个方法
registerBeanDefinition()
首先是我们的 registerBeanDefinition() 方法
@Override
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
throws BeanDefinitionStoreException {
/* 对 beanDefinition 进行校验 */
((AbstractBeanDefinition) beanDefinition).validate();
/* 首先去 map 中(也可以理解为缓存)去查找 beanDefinition */
BeanDefinition existingDefinition = this.beanDefinitionMap.get(beanName);
/* 如果找到的 beanDefinition 不为空 */
if (existingDefinition != null) {
/* 这里做了一堆判断,如果都没发生错误(异常)就执行下面语句,重新将它放入到map(缓存)中 */
this.beanDefinitionMap.put(beanName, beanDefinition