BeanDefinition的解析和载入
- AbstractBeanDefinitionReader.loadBeanDefinitions(String, Set<Resource>)
- 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定义注册容器的执行过程分析