Spring IOC容器加载流程
2021-03-23 19:07:14 0 举报
Spring IOC容器加载流程
作者其他创作
大纲/内容
doRegisterBeanDefinitions(Element root)
如果是beans ,执行doRegisterBeanDefinitions
委派模式!调用子类方法
processBeanDefinition//定义BeanDefinitionHolder//parseBeanDefinitionElement()开始解析
super(register)//初始化!and 其他赋值操作
getEnvironment()获取环境、系统变量
2
inputStream.close();//关闭资源
元素节点是bean,按照spring的bean规则解析
customizeBeanFactory(beanFactory);//定制
3
BeanDefinitionReaderUtils
getResource().getInputStream()//资源文件转为IO
委派模式
BeanDefinitionParserDelegate
hasBeanFactory()//判断是否存在容器,存在就销毁and关闭destroyBeans();\t\t\tcloseBeanFactory();
AbstractXmlApplicationContext
if(null)
XmlBeanDefinitionReader.loadBeanDefinitions()
DefaultListableBeanFactory
真正加载
yes
DefaultDocumentLoader
delegate.isDefaultNamespace(ele)
...
createEnvironment()获取环境变量! new StandardEnvironment();propertySourceList.add(环境、系统变量)
new XmlBeanDefinitionReader(beanFactory)
否则,创建容器!createBeanFactory()beanFactory.setSerializationId(getId());
告诉读取器文件的位置
cancelRefresh(ex);//取消refresh操作
元素节点是Alias,进行别名解析
refresh() ==>key 刷新!
registerBeanDefinition(args...)//注册操作
元素节点是Import,进行导入解析
AbstractRefreshableConfigApplicationContext
Document.getDocumentElement()//获得对象根元素
doLoadBeanDefinitions//读取Bean
loadBeanDefinitions(beanFactory);//加载
parseCustomElement(Element ele) //用户自定义解析规则
refresh()
refreshBeanFactory();
refresh() { prepareRefresh();//准备 obtainFreshBeanFactory();//通知子类刷新beanFactory}
new EncodedResource(resource)//文件编码
XmlBeanDefinitionReader
DefaultBeanDefinitionDocumentReader
resolvePath(String path)解析路径
1
(构造器)XmlBeanDefinitionReader(registry)
destroyBeans();//销毁Bean对象
parseBeanDefinitionElement(Element ,BeanDefinition)//部分解析
false
setConfigLocations(configLocations);
ClassPathXmlApplicationContext
....
loadBeanDefinitions(beanFactory)
AbstractRefreshableApplicationContext
AbstractApplicationContext
收藏
0 条评论
下一页