3.Spring源码系列-bean工厂的创建

介绍

在AbstractApplicationContext类的refresh方法中,有一行ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();它的作用就是创建bean工厂。详细的说做了三件事

  1. 创建bean工厂,工厂实例是DefaultListableBeanFactory;
  2. 定制化工厂属性;
  3. 加载定义bean的xml文件,扫描被注解@component标注的类,将其解析为bean definition并加载到bean 工厂里;

时序图

image.png

方法调用链

  1. obtainFreshBeanFactory
// 创建bean工厂
refreshBeanFactory();
// 获取创建的bean工厂
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
  1. refreshBeanFactory
// 创建bean工厂实例,创建的方法是直接new的实例
DefaultListableBeanFactory beanFactory = createBeanFactory();
// 定制化bean工厂属性
customizeBeanFactory(beanFactory);
// 解析并加载xml文件
loadBeanDefinitions(beanFactory);
  1. customizeBeanFactory
// 设置该bean工厂管理的bean definition是否允许被覆写
beanFactory.setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding);
// 设置该bean工厂管理的bean是否允许循环引用
beanFactory.setAllowCircularReferences(this.allowCircularReferences);
  1. loadBeanDefinitions
// 创建一个xml读取器
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);

// 获取web.xml里配置的configLocation参数
String[] configLocations = getConfigLocations();

// for循环加载xml文件并注册bean definition
for (String configLocation : configLocations) {
                reader.loadBeanDefinitions(configLocation);
            }

下一章会剖析xml文件解析

你可能感兴趣的:(3.Spring源码系列-bean工厂的创建)