创建容器对象:DefaultListableBeanFactory
加载xml配置文件的属性值到当前工厂中,最重要的就是BeanDefinition

refreshBeanFactory()

初始化BeanFactory,并进行XML文件读取,并将得到的BeanFactory记录在当前实体的属性中
image.png

customizeBeanFactory(beanFactory)

定制beanFactory,设置相关属性,包括是否允许覆盖同名称的不同定义的对象以及循环依赖
image.png
此处子类重写父类方法设置可生效
image.png

loadBeanDefinitions(beanFactory)

初始化documentReader,并进行XML文件读取及解析,默认命名空间的解析,自定义标签的解析
这里有一系列重载,首先通过适配器模式来处理beanFactory,new一个beanDefinitionReader,完成一些设置并初始化。
image.png
继续重载,以String的形式获得配置文件的位置,此时是一个String数组image.png
遍历数组,单独处理每一个String元素
获取resourceLoader对象,并完成具体的Resource定位,此时是一个Resource数组image.png
遍历Resource数组,单独处理Resource元素,继续重载,从encodedResource中获取已经封装的Resource对象并再次从Resource中获取其中的inputStream
image.png
核心处理逻辑
此处获取xml文件的document对象,这个解析过程是由documentLoader完成的image.png
注册Bean的定义信息
image.png
具体解析过程,此处有一个代理对象
image.png
根据不同的命名空间属性做不同的处理image.png
下方为自定义命名空间处理方法。
image.png
从配置的映射中找到提供的命名空间
image.png
调用自定义的NamespaceHandler进行解析image.png
具体的解析方法image.png
解析内部,并返回解析完成的beanDefinitionimage.png
向beanFactory注册beanDefinitionimage.png
将beanDefinition数据放入map和list
image.png