spring源码理解-BeanFactory子类XmlBeanFactory的创建过程
来源:互联网 发布:人工智能要学单片机吗 编辑:程序博客网 时间:2024/05/17 07:40
BeanFactory
1:BeanFactory是什么:
官方解释The root interface for accessing a Spring bean container,翻译成中文spring bean容器的最基本接口,也就是作为一个spring容器,必须实现它。
2:BeanFactory容器乘的要内容是什么
This interface is implemented by objects that hold a number of bean definitions
2.1他可以乘bean definitions。
对于bean definitions是什么东东,应该看BeanDefinition这个类的定义:A BeanDefinition describes a bean instance, which has property values,constructor argument values, and further information supplied byconcrete implementations.说白了就是对<bean></bean>标签内容的解析,不过仅仅是xml中<bean>的解析,并不是实例化的对象。跟踪BeanFactory的实现类XmlBeanFactory代码发现其实现了接口BeanDefinitionRegistry,定义了对BeanDefinition的增删改查等操作。
2.2他可以乘单例对象
具体实例化对象的注册位置(一般是单例的,对于原型没有必要保存)。跟踪BeanFactory的实现类XmlBeanFactory代码发现其实现了接口SingletonBeanRegistry,在这个接口了,专门定义了单例对象的增增删改查等操作。
XmlBeanDefinitionReader
从xml中读取bean definitions。将xml解析成dom文档,并通过一个实现了 BeanDefinitionDocumentReader接口的对象来解析该dom文档,最终将xml的标签解析为BeanDefinition对象。
BeanDefinitionDocumentReader与BeanDefinitionParserDelegate
将dom文档最终解析为BeanDefinition,并添加到BeanDefinition容器中。
具体的操作流程
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring.xml"));
1 在XmlBeanFactory的构造函数中执行
this.reader.loadBeanDefinitions(resource);reader为其一个字段
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
2在loadBeanDefinitions中主要执行的为
doLoadBeanDefinitions(inputSource, encodedResource.getResource())
3在doLoadBeanDefinitions中主要执行的为
registerBeanDefinitions(doc, resource);4获取BeanDefinitionDocumentReader并执行
registerBeanDefinitions(doc, createReaderContext(resource));5在registerBeanDefinitions方法中主要执行的为
parseBeanDefinitions(root, delegate);6通过delegate对dom文档进行解析
delegate.decorateBeanDefinitionIfRequired(ele, bdHolder);解析类型很多,再次只是为特殊标签进行了解析
7对解析完成的BeanDefinition进行注册
BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());
解析的xml
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd "><bean id="person" class="model.Person"><property name="name"><value>lisi</value></property><property name="sex"><value>boy</value></property></bean></beans>
解析流程图
注意:此博客为我第一次阅读spring源码,源码内容为spring3.0.其中的错误之处请多包涵并欢迎指正。流程图也存在不规范之处
0 0
- spring源码理解-BeanFactory子类XmlBeanFactory的创建过程
- Spring源码学习之XmlBeanFactory的实现
- Spring源码由浅入深系列四 创建BeanFactory
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- spring源码分析-XmlBeanFactory导读
- 判断输入的内容是否包含emoj表情
- 黑马程序员---java中Timer类的介绍以及使用
- 两性测试:你对哪种男人甘愿为奴(图)
- 64位下RTLabel的一处崩溃
- github开发
- spring源码理解-BeanFactory子类XmlBeanFactory的创建过程
- github上好的开源项目(一)
- [MFC]选择目录对话框和选择文件对话框
- 设置glblendfunc出现黑框
- Android-获取Bitmap对象的API效果差异对比
- LeetCode_52---N-Queens II
- 支持取消操作和暂停操作的Backgroundworker
- Java反射(一)Class类对象
- 虚拟机里的Linux系统界面太小,怎么让它变大?