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文件解析

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容