本文使用的代码是: 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体系结构(一)的更多相关文章

  1. Spring源码学习之BeanFactory体系结构

    一.BeanFactory BeanFactory是Spring IOC容器的鼻祖,是IOC容器的基础接口,所有的容器都是从它这里继承实现而来.可见其地位.BeanFactory提供了最基本的IOC容 ...

  2. BeanFactory体系结构

    BeanFactory是Spring中非常重要的一个类,搞懂了它,你就知道了bean的初始化和摧毁过程,对于深入理解IOC有很大的帮助. BeanFactory体系结构 首先看一下使用IDEA生成的继 ...

  3. 十、Spring之BeanFactory源码分析(二)

    Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...

  4. 九、Spring之BeanFactory源码分析(一)

    Spring之BeanFactory源码分析(一) ​ 注意:该随笔内容完全引自https://blog.csdn.net/u014634338/article/details/82865644,写的 ...

  5. Spring的BeanFactory是什么?

    什么是BeanFactory? 提到Spring,总是让人第一时间想起IOC容器,而IOC容器的顶层核心接口就是我们的BeanFactory,如果能够理解BeanFactory的体系结构想必能让我们对 ...

  6. Spring之BeanFactory及Bean生命周期

    1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...

  7. spring之BeanFactory

    spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后 ...

  8. Spring 之BeanFactory(转)

    BeanFactory是Spring的“心脏”.它就是Spring IoC容器的真面目. Spring使用BeanFactory来实例化.配置和管理Bean.但是,在大多数情况我们并不直接使用Bean ...

  9. 简单实现Spring中BeanFactory原理

    上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring ...

随机推荐

  1. 【Linux】- Ubuntu守护进程supervisor

    linux的守护进程类似于windows的服务.linux通过supervisor创建守护进程. 1.安装supervisor sudo apt-get install supervisor 安装成功 ...

  2. phpcms黄页,不能选择行业。解决办法

    用phpcms黄页模块,发布产品的时候.不能选择 产品分类,点开之后,啥都没有,是空的. 这个是因为:js的问题. 解决办法:将 网站根目录的 js 文件中的两个文件,更换为 官方的两个js文件.即可 ...

  3. Maven 3-Maven依赖版本冲突的分析及解决小结 (阿里,美团,京东面试)

    举例A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,Maven可通过<scope>等若干种方式控制传递依赖).这里 ...

  4. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  5. 什么是Docker?(6-12)

    关于什么是Docker,刚开始学的时候一脸懵X,这个东西到底是干嘛用的啊?偶然间在知乎上刷到一个比较通俗的解释: Docker就相当于一个容器,这个容器了不得了,它里面能搭好你项目需要的所有环境,并且 ...

  6. [HAOI2010]计数 数位DP+组合数

    题面: 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. ...

  7. BZOJ1027 [HNOI2004]打鼹鼠 【dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3647  Solved: 1746 [Submit][Sta ...

  8. 洛谷 P1311 选择客栈 解题报告

    P1311 选择客栈 题目描述 丽江河边有 \(n\) 家很有特色的客栈,客栈按照其位置顺序从 \(1\) 到 \(n\) 编号.每家客栈都按照某一种色调进行装饰(总共 \(k\) 种,用整数 \(0 ...

  9. HDOJ(HDU).2266 How Many Equations Can You Find (DFS)

    HDOJ(HDU).2266 How Many Equations Can You Find (DFS) [从零开始DFS(9)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零 ...

  10. 2016多校联合训练1 D题GCD (ST表+二分)

    暑假颓废了好久啊...重新开始写博客 题目大意:给定10w个数,10w个询问.每次询问一个区间[l,r],求出gcd(a[l],a[l+1],...,a[r])以及有多少个区间[l',r']满足gcd ...