- AbstractBeanDefinitionReader.loadBeanDefinitions(String, Set)
- AbstractBeanDefinitionReader.loadBeanDefinitions(Resource...)
- XmlBeanDefinitionReader.loadBeanDefinitions(Resource)
- XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource)
- XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource, Resource)
- XmlBeanDefinitionReader.registerBeanDefinitions(Document, Resource)
- DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(Document, XmlReaderContext)
- DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(Element)
- DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element, BeanDefinitionParserDelegate)
- DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element, BeanDefinitionParserDelegate)
- DefaultBeanDefinitionDocumentReader.processBeanDefinition(Element, BeanDefinitionParserDelegate)
- BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element)
- BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element, BeanDefinition)
- BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element, String, BeanDefinition)
springboot版本:2.5.6。
上一篇讲了BeanDefinition的Resource定位:Spring IoC容器初始化过程。
接下来是BeanDefinition的解析和载入。
对于IoC容器来说,这一步相当于是把BeanDefinition定义的信息在IoC容器中转换为spring内部数据的过程,
IoC容器对bean的管理是通过操作持有的BeanDefinition来实现的。
AbstractBeanDefinitionReader.loadBeanDefinitions(String, Set)

AbstractBeanDefinitionReader.loadBeanDefinitions(Resource…)
在AbstractXmlApplicationContext.loadBeanDefinitions(DefaultListableBeanFactory)中有,
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
所以这里调用的是XmlBeanDefinitionReader中的实现。

XmlBeanDefinitionReader.loadBeanDefinitions(Resource)
XmlBeanDefinitionReader.loadBeanDefinitions(EncodedResource)

XmlBeanDefinitionReader.doLoadBeanDefinitions(InputSource, Resource)
这一步会将xml解析为一个doc。

XmlBeanDefinitionReader.registerBeanDefinitions(Document, Resource)

DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(Document, XmlReaderContext)
DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(Element)

DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(Element, BeanDefinitionParserDelegate)
解析BeanDefinition。

DefaultBeanDefinitionDocumentReader.parseDefaultElement(Element, BeanDefinitionParserDelegate)
DefaultBeanDefinitionDocumentReader.processBeanDefinition(Element, BeanDefinitionParserDelegate)
BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element)
处理BeanDefinition。
BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element, BeanDefinition)
BeanDefinitionParserDelegate.parseBeanDefinitionElement(Element, String, BeanDefinition)
终于看到createBeanDefinition了。

到这里完成BeanDefinition的解析和载入。
refs:
程序晓猿:spring源码系列04-refresh方法分析-BeanFactoryPostProcessor的执行
EakonZhao:Spring源码探究:IoC容器初始化过程详解
wade&luffy:ClassPathXmlApplicationContext的启动
mist蒙:spring源码解析之ioc-BeanDefinition的加载
Maybe_9527:Spring源码分析系列----ClassPathXmlApplicationContext加载xml中bean定义注册容器的执行过程分析