Spring web环境下IOC容器启动调用时序图
2019-11-13 13:32:27 1 举报
Spring再Web环境下,IOC容器启动的详细调用时序图
作者其他创作
大纲/内容
prepareRefresh();
AbstractXmlApplicationContext
AbstractApplicationContext
doRegisterBeanDefinitions(root)
AbstractBeanDefinitionReader
obtainFreshBeanFactory()
主要逻辑:1.创建BeanDefinitionDocumentReader来对xml格式的BeanDefinition解析2.获得容器中已经注册的Bean数量3.委派子类DefaultBeanDefinitionDocumentReader调用的registerBeanDefinitions()来注册BeanDefinition
obtainFreshBeanFactory()方法也是模板设计模式的实现:定义了两个抽象方法的调用refreshBeanFactory()和getBeanFactory().具体的实现在AbstractApplicationContext的子类AbstractRefreshableApplicationContext中
调用加载Bean定义的方法,这里使用了委派模式:在当前类中只定义了抽象的loadBeanDefinitions方法具体的实现在AbstractXmlApplicationContext中实现
主要逻辑:1.把xml转换为Dom文档(调用JavaEE标准的JAXP标准进行处理)2.详细的解析dom,然后注册BeanDefinition至此,整个ioc启动的加载过程已经完成,接下来就是注册了
loadBeanDefinitions(reader)
loadBeanDefinitions(configLocations)
循环
refreshBeanFactory()
loadBeanDefinitions(EncodedResource encodedResource)
定位
主要逻辑:1.根据location把对应资源抽象为Spring中的ResourceSpring中Resource类型有ClassPathResource、UrlResource等等2.接下来又使用了委派设计模式调用子类的loadBeanDefinitions(resource)方法使用的实现是XmlBeanDefinitionReader
XmlBeanDefinitionReader
contextInitialized(event)
ContextLoader
入口
prepareRefresh();主要作用:调用容器准备刷新的方法,获取容器的当时时间,同时给容器设置同步标识
加载
postProcessXml(root)
DefaultListableBeanFactory
BeanDefinitionParserDelegate典型的委派设计模式的实现。把不同的元素解析委派给不同的解析对象来处理
AbstractRefreshableApplicationContext
refresh()
loadBeanDefinitions(Resource resource)
createBeanFactory()
获取到配置文件的根元素
返回一个BeanDefinitionHolder
BeanDefinitionReaderUtils
DefaultBeanDefinitionDocumentReader
parseBeanDefinitionElement(Element ele)
registerBeanDefinition()
preProcessXml(root)
loadBeanDefinitions(beanFactory)
initWebApplicationContext(servletContext)
主要逻辑:1.把对应的Resource资源转换为InputStream的IO流2.从InputStream中得到XML的解析源3.真正的加载bean定义4.关闭io流【Spring的源码中有个规律,所有doXX的方法一般是真正执行逻辑的部份】
解析,注册
ContextLoaderListener
主要逻辑:1.获取之前设置的configLocations配置文件位置信息2.调用XmlBeanDefinitionReader.loadBeanDefinitions(configLocations)方法3.首先进入它的父类AbstractBeanDefinitionReader的loadBeanDefinitions方法
BeanDefinitionParserDelegate
customizeBeanFactory(beanFactory)
收藏
0 条评论
下一页