1.Spring Bean配置文件加载
2021-08-06 17:54:06 0 举报
Spring Bean配置文件加载
作者其他创作
大纲/内容
AbstractRefreshableApplicationContext#refreshBeanFactory()
loadBeanDefinitions(DefaultListableBeanFactory beanFactory)
// 给指定的 BeanFactory 创建一个新的 XmlBeanDefinitionReader。(DefinitionReader读取器)XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);// 设置环境beanDefinitionReader.setEnvironment(this.getEnvironment());// 设置一个资源加载器beanDefinitionReader.setResourceLoader(this);// 设置xml约束beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(this));span style=\"font-weight: normal;\
doLoadBeanDefinitions(span style=\"font-weight: normal;\
创建BeanDefinition读取器(Reader)
AbstractXmlApplicationContext#loadBeanDefinitions()
用资源加载器加载出资源Resource
ClassPathXmlApplicationContext#refresh()
AbstractApplicationContext#refreshBeanFactory()
ClassPathXmlApplicationContext#setConfigLocations(\"bean.xml\")
DefaultBeanDefinitionDocumentReader#parseBeanDefinitions()
XmlBeanDefinitionReader# loadBeanDefinitions()
这里XmlBeanDefinitionReader负责把Resource转为Document;然后交给DefaultBeanDefinitionDocumentReader去解析。
doRegisterBeanDefinitions(Element root)
loadBeanDefinitions(EncodedResource encodedResource)
loadBeanDefinitions(span style=\"font-weight: normal;\
refreshBeanFactory()
// 创建列表化的工厂DefaultListableBeanFactory beanFactory = createBeanFactory();beanFactory.setSerializationId(getId());customizeBeanFactory(beanFactory);// ***************// 加载BeanDefinitionloadBeanDefinitions(beanFactory);// ***************
#loadBeanDefinitions(XmlBeanDefinitionReader reader)
// 获取资源Resource[] configResources = getConfigResources();// 根据Resource加载BeanDefinitionif (configResources != null) { reader.loadBeanDefinitions(configResources);}// 根据locations(路径)加载BeanDefinitionString[] configLocations = getConfigLocations();if (configLocations != null) { reader.loadBeanDefinitions(configLocations);}
XmlBeanDefinitionReader#doLoadBeanDefinitions()
刷新工厂
DefaultBeanDefinitionDocumentReader#processBeanDefinition()
DefaultListableBeanFactory#registerBeanDefinition()
AbstractApplicationContext#obtainFreshBeanFactory()
资源Resource转化为Document
处理Document,将Document变成Spring需要的BeanDefinition
AbstractBeanDefinitionReader#loadBeanDefinitions()
创建工厂
设置Bean配置文件路径
BeanDefinitionReaderUtils#registerBeanDefinition()
用BeanDefinitionReaderUtils把这些BeanDefinition放到Spring容器(BeanFactory)里面
DefaultBeanDefinitionDocumentReader#doRegisterBeanDefinitions()
bean.xml
用读取器去加载BeanDefinition
?为什么可以AbstractXmlApplicationContext设置为ResourceLoader?
loadBeanDefinitions(Resource resource)
// 给resource做了一层包装、适配器 return loadBeanDefinitions(new EncodedResource(resource));
.span style=\"font-size: inherit;\
把解析好的数据(BeanDefinition)封装进BeanDefinitionHolder
?registry最后为什么是用DefaultListableBeanFactory来调用?
收藏
0 条评论
回复 删除
下一页