Spring基于XML方式加载Bean定义信息(又名:Spring IOC源码时序图)
2021-07-20 18:55:30 314 举报
Spring IOC 源码解析时序图
作者其他创作
大纲/内容
2
真正开始读取BeandoLoadBeanDefinitions()
3
调用registry.registerBeanDefinition() 方法,执行注册操作
if
使用委派模式,调用子类中的\t\trefreshBeanFactory()
refresh()开始刷新
AbstractRefreshableApplicationContext
Resource().getInputStream()将资源文件转为InputStream的IO流
processBeanDefinition()调用方法解析 Bean
registerBeanDefinitions()Bean定义解析详细过程
3.使用委派模式,调用documentReader.registerBeanDefinitions()
注册
BeanDefinitionReaderUtils.registerBeanDefinition()调用该方法,向 Spring IOC 容器中注册解析得到的 Bean定义,这是Bean定义向IOC容器注册的入口
1
......
loadBeanDefinitions()
1.判断是否已经存在容器,销毁容器中的bean,关闭容器
调用Bean读取器真正实现加载的方法loadBeanDefinitions()
加载
如果元素节点是<Alias>别名元素,进行别名解析
定义 BeanDefinition 封装类,通过方法 parseBeanDefinitionElement() 开始解析
Spring IOC 源码解析时序图
AbstractXmlApplicationContext
inputStream.close()关闭从Resource中得到的IO流
如果元素节点是<Import>导入元素,进行导入解析
BeanDefinitionParserDelegate
调用AbstractApplicationContext 类 refresh()方法中的 ----obtainFreshBeanFactory()
XmlBeanDefinitionReader
parseBeanDefinitions()从Document的根元素开始进行Bean定义的Document对象
parseDefaultElement()使用Spring的Bean规则解析元素节点
调用resolvePath()方法解析路径
else
2.反之,创建IOC容器。并调用加载 Bean 定义的方法
doLoadDocument()将XML文件转换为DOM对象
如果Document的根节点没有使用Spring默认的命名空间,则使用用户自定义的解析规则解析Document根节点例如<dubbo:reference> 等节点
AbstractApplicationContext
setConfigLocations()告诉读取器配置文件所在的路径(定位)
元素节点既不是导入元素,也不是别名元素,即普通的<Bean>元素,按照Spring的Bean规则解析元素
如果时序图对您有用,请在右上角给点个赞吧。5个赞我能多一张文件,支持作者继续画出更好的时序图给大家,谢谢大家支持配套博客介绍:请搜索CSDN 扛麻袋的少年
BeanDefinition
解析完成开始注册
doRegisterBeanDefinitions()
destroyBeans()
cancelRefresh()
DefaultBeanDefinitionDocumentReader
BeanDefinitionReaderUtils
doc.getDocumentElement()获取 DOM 对象根元素
DefaultListableBeanFactory
扛麻袋的少年 2020-03-10
delegate.parseCustomElement()
ClassPathXmlApplicationContext
AbstractRefreshableConfigApplicationContext
定位
0 条评论
下一页