2-BeanFactory容器的设计原理
来源:互联网 发布:淘宝开放平台人工客服 编辑:程序博客网 时间:2024/06/02 05:47
1、BeanFactory接口提供了使用IOC容器的规范。在这个基础上,Spring还提供了符合这个IOC容器的一些类实现供开发人员使用。下面以XmlBeanFactory的实例为例来说明简单IOC容器的设计原理。
2、XmlBeanFactory设计的类继承关系
3、通过上面的继承体系,可以看出,作为一个简单IOC容器系列最底层实现的XmlBeanFactory,与我们在Spring应用中的上下文相比,有一个非常明显的特点:它只提供最基本的IOC容器的功能。我们可以认知直接的BeanFactory实现是IOC容器的基本形式,而各种ApplicationContext的实现是IOC容器的高级形式。
4、在Spring中,实际上是把DefaultListableBeanFactory作为一个默认的功能完整的IOC容器来使用的。XmlBeanFactory在继承了DefaultListableBeanFactory容器的功能的同时,并在这个基本容器基础上实现了其他诸如XML读取的附加功能,其代码如下:
参考XmlBeanFactory的实现,我们以编程式的方式使用DefaultListableBeanFactory.
主要步骤:
(1)创建IOC容器的资源的抽象,这个抽象资源包含BeanDefinition的定义信息。
(2)创建一个BeanFactory,这里使用DefaultListBeanFactory。
(3)创建一个BeanDefinition的读取器,这里使用XmlBeanDefinitionReader来载入XML文件形式的BeanDefinition,通过一个回调配置给BeanFactory。
(4)从定义好的资源位置读入配置信息,具体解析过程由XmlBeanDefinitionReader来完成。完成整个载入和注册后,IOC容器就建立好了。就可以直接使用了。
关于载入配置文件并通过回调注册bean定义。
载入配置文件和注册bean都是在XmlBeanDefinitionReader调用以后的后续动作中处理的(当然过程中也调用了其他类)。,先载入配置再注册,在
XmlBeanDefinitionReader reader= new XmlBeanDefinitionReader (factory);
这一句 之所以要使用factory参数,就是reader在做完配置文件载入之后,再把factory拿过来,把刚读入的xml文件中的信息注册到factory。回调也就是体现在这里。
通俗的来说,就是DefaultListabelBeanFactory 是一个beanFactory,用来管理bean,但是他却不能注册bean,所以就需要把自己(容器)交给 XmlBeanDefinitionReader ,而XmlBeanDefinitionReader 恰恰可以处理配置信息并且注册bean,XmlBeanDefinitionReader 载入后,再把这个bean的信息注册到 DefaultListabelBeanFactory 给的容器里,还给DefaultListabelBeanFactory。
- 2-BeanFactory容器的设计原理
- Sping 的 BeanFactory 容器
- IoC容器系列的设计与实现:BeanFactory和ApplicationContext
- IoC容器系列的设计与实现:BeanFactory和ApplicationContext
- Spring原理(一)IoC容器的初始化过程之BeanFactory
- spring的BeanFactory原理模拟
- spring的BeanFactory原理模拟
- (一)IOC容器系列的设计与实现:BeanFactory和ApplicationContext
- STL容器设计原理
- Spring容器对象(BeanFactory)
- Spring容器对象(BeanFactory)
- (1.0)Spring的IoC容器之BeanFactory
- 【Spring4揭秘 BeanFactory】基本容器-BeanFactory
- 2:Bean容器的设计
- [C++] STL容器设计原理
- Spring(2)与接口配合使用和获取Bean容器的两种方式(BeanFactory 、ApplicationContext)
- Spring--IoC--创建BeanFactory容器
- 获取spring容器总的BeanFactory
- Python 基础 —— 判断一个对象是否为可迭代对象
- [CSU 1915 John and his farm]树形DP+LCA
- 1-IOC容器的主要接口设计
- Python 基础 —— 匿名函数 lambda
- 将一台机器上的文件移动到另一台ftp服务器
- 2-BeanFactory容器的设计原理
- 我党历史上的土地革命
- Python 基础 —— float("inf") 无穷的相关问题
- 0/1背包问题-----动态规划求解
- SSM整合
- Codeforces 430B Balls Game 构造
- 3-ApplicationContext应用场景及设计原理
- java中类加载的全过程及内存图分析
- python 内置数据结构的基本操作 —— list(2)