Spring的BeanFactory体系结构(一)
本文使用的代码是: Spring 3.0
接 触Spring也有很长一段时间了。但是,每次都是直接使用Spring直接提供的API,时间久了,自然也会想探索Spring里面的奥秘。今天上 午,整理出了Spring的BeanFactory的一个体系结构(当然不是完整的,是以XmlFactory为最终目标),如下图(点击可到图片页 面):
图下次补上。
沿着XmlBeanFactory向上追溯,可以形成上面的BeanFactory体系结构。虽然不是 很全面,但是如果这个图能理解透,我相 信,Spring的BeanFactory就能理解透了。之后的系列我也会以这个图为中心,深入的去学习Spring的BeanFactory。
下面是对各个接口的理解。
BeanFactory
这个就是BeanFactory容器的最原始接口,也是spring容器提供的最原始客户端接口。
AutowireCapableBeanFactory
拥 有自动装配能力的BeanFactory。这个BeanFactory并非是要用到应用中去的,在应用中要用,就用BeanFactory或者是 ListableBeanFactory。这个接口更多的作用是用于和其他框架的结合,把不在Spring容器中的Bean加入到Spring容器声明周 期管理中来。
需要注意的是,在Spring的ApplicationContext(Spring的应用容器)中,并没有实现这个接口,因为这个接口在应用中,确实很少用到。
不 过,你可以通过ApplicationContext的getAutowireCapableBeanFactory()方法获得。或者,你也可 以实现BeanFactoryAware(这个接口就是为了取得BeanFactory的),然后把BeanFactory转换成 AutowireCapableBeanFactory。
HierarchicalBeanFactory
有 层次的BeanFactory。如果实现了这个接口,可能就以为着你也需要实现ConfigurableBeanFactory。因为 ConfigurableBeanFactory定义了设置父容器的方法,而HierarchicalBeanFactory的方法只有获得父容器的方 法。而一般情况下,ConfigurableBeanFactory接口直接继承了HierarchicalBeanFactory。所以,它的实现,也 是肯定要设置父容器的。
ListableBeanFactory
顾名思义,此BeanFactory是可以把容器中的bean循环枚举出来,而不是按照名字一个一个去取。
如果实现此接口的同时,也实现了HierarchicalBeanFactory,那么这个接口中的方法是不会去考虑父容器中的bean的。
需要注意的是:除了getBeanDefinitionCount和containsBeanDefinition方法之外,其他的方法最好不要直接在代码中调用,因为其实现可能会非常慢。
SingletonBeanRegistry
这个接口定义了一个注册singleton bean的容器。此接口可以被BeanFactory的实现实现,用来形成一个统一管理singleton bean的风格。ConfigurableBeanFactory接口就继承了此接口。
ConfigurableBeanFactory
此接口定义了BeanFactory的扩配置功能,几乎所有的beanFactory都会实现这个接口。
同样,此接口也不推荐在常见的应用代码中使用(还是推荐使用BeanFactory和ListableBeanFactory)。这个接口也赋予了BeanFactory可扩展的功能,
ConfigurableListableBeanFactory
又是可配置,又是Listable的BeanFactory,就可以实现这个接口。除了ConfigurableBeanFactory的功能之外,它还提供了访问和修改BeanDefinition,预实例化singletons。
AliasRegistry
管理别名的公共接口。
BeanDefinitionRegistry
注册BeanDefinition(Spring内部映射Bean的数据结构)的接口。
在这个体系中,接口部分,我就看了上面这些。下篇文章,我会深入去学习每个接口的实现,就是上图中右边的那些实现。
Spring的BeanFactory体系结构(一)的更多相关文章
- Spring源码学习之BeanFactory体系结构
一.BeanFactory BeanFactory是Spring IOC容器的鼻祖,是IOC容器的基础接口,所有的容器都是从它这里继承实现而来.可见其地位.BeanFactory提供了最基本的IOC容 ...
- BeanFactory体系结构
BeanFactory是Spring中非常重要的一个类,搞懂了它,你就知道了bean的初始化和摧毁过程,对于深入理解IOC有很大的帮助. BeanFactory体系结构 首先看一下使用IDEA生成的继 ...
- 十、Spring之BeanFactory源码分析(二)
Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...
- 九、Spring之BeanFactory源码分析(一)
Spring之BeanFactory源码分析(一) 注意:该随笔内容完全引自https://blog.csdn.net/u014634338/article/details/82865644,写的 ...
- Spring的BeanFactory是什么?
什么是BeanFactory? 提到Spring,总是让人第一时间想起IOC容器,而IOC容器的顶层核心接口就是我们的BeanFactory,如果能够理解BeanFactory的体系结构想必能让我们对 ...
- Spring之BeanFactory及Bean生命周期
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...
- spring之BeanFactory
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后 ...
- Spring 之BeanFactory(转)
BeanFactory是Spring的“心脏”.它就是Spring IoC容器的真面目. Spring使用BeanFactory来实例化.配置和管理Bean.但是,在大多数情况我们并不直接使用Bean ...
- 简单实现Spring中BeanFactory原理
上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring ...
随机推荐
- C/S结构 B/S结构
[1]C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销.目前大多数应 ...
- [剑指Offer] 45.扑克牌顺子
题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...
- WPF布局间的切换方法
效果图,两种效果间的切换
- 新jQuery中attr 与 prop的不同
使用最新版本jquery,在对checkbox操作时发现 attr属性全选,反选等不起作用,后查发现新版本对标签属性的设置发生了变化. 在高版本的jquery引入prop方法后,什么时候该用prop? ...
- ICommand接口
WPF 中的命令是通过实现 ICommand 接口创建的.ICommand 的 WPF 实现是 RoutedCommand 类. WPF 中的主要输入源是鼠标.键盘.墨迹和路由命令.更加面向设备的输入 ...
- 单点登录Windows实现
Windows实现步骤: server.xml修改方式 hosts修改方式 CAS客户端配置 CAS配置filter.txt内容如下: <!-- ======================== ...
- python 深浅copy的例子
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:import copya = [1, 2, 3, ...
- CentOS 访问控制列表(tcp wrappers)
1.TCP Wrappers是一个工作在应用层的安全工具,它只能针对某些具体的应用或者服务起到一定的防护作用.比如说ssh.telnet.FTP等服务的请求,都会先受到TCP Wrappers的拦截. ...
- [SCOI2007]组队 差分
题面:[SCOI2007]组队 题解: 一开始固定H然后找性质找了很久也没有找到任何有用的东西...... 然后大佬告诉我一个神奇的方法... 首先我们化一波式子: 设$H$表示高度的最小值,$V$表 ...
- LeetCode中二叉树题目总结
本文仅为博主个人总结,水平有限,欢迎大神指出不妥处. 关于二叉树的相关概念可以参见二叉树的百度百科,或binary tree Wiki. 二叉树结点类的常见定义为: /* Definition for ...