1:概述
我们都知道Spring容器管理着各种实例化对象,为保证实体化对象生成的统一性、规则性,抽象出统一的bean定义是必要的,所以在对象实例化之前,需要将bean的定义属性统一封装成BeanDifination对象作为Bean实例化的基石和桥梁。BeanDifination封装的来源有基于XML的,有基于注解的,BeanDifinition也会进步一的抽象和自定义,分门别类的完成对各种来源的配置方式的需求。
Spring容器加载方式主要有四种:
- 类路径获取配置文件(ClassPathXmlApplicationContext)
- 文件系统路径获取配置文件绝对路径(FileSystemXmlApplicationContext)
- 注解配置加载容器(AnnotationConfigApplicationContext)
- Springboot加载容器(EmbeddWebApplictionContext):3:ClassPathXmlApplicationContext加载
本文主要解析基于XML配置方式完成BeanDifination对象的封装过程。
2:Xml 属性配置的解析过程
2.1 解析入口obtainFreshBeanFactory()
创建BeanFactory
xml解析
BeanDefination对象的封装
2.2 代码梳理
类关系图:方便对模板模式下的父类引用进行准确的定位
访问入口:
refreshBeanFactory()
加载BeanDefinitions
从xml中加载BeanDifinition
BeanDefinitionHolder这里涉及到装饰器模式,丰富封装的BeanDefiniation对象。
对于生成好的BeanDefinitionHolder如何进行缓存并且实例化成对象,参见bean实例化流程。