在Spring IOC的容器设计中,咱们能够看到两个主要的容器系列:数据结构
一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了最基本的功能spa
另外一个是ApplicationContext应用上下文,做为容器的高级形态出现设计
1.Spring的IOC容器系列对象
如图展现了Spring IOC容器的状况:继承
接口类BeanFactory,它体现了Spring为提供给用户使用的IOC容器的最基本的功能的规范.BeanFactory做为一个最基本的接口出如今Spring IOC的容器体系中.接口
Spring经过定义BeanDefinition来管理Spring的应用中的各类对象以及它们之间的相互依赖关系.对Spring IOC来讲,BeanDefinition就是对依赖翻转模式中管理的对象依赖关系的数据抽象,也是容器实现依赖翻转功能的核心数据结构.开发
2.Spring IOC容器的设计get
如图展现了Spring IOC的主要接口设计:it
从BeanFactory 到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一条主要的BeanFactory的设计路径.BeanFactory接口定义了IOC容器的基本功能规范.HierarchicalBeanFactory在继承了BeanFactory 接口后,增长了getParentBeanFactory()方法,这样就使容器具有了双亲IOC的管理功能.ConfigurableBeanFactory接口中,主要是定义了一些BeanFactory 的配置功能.io
第二条设计主线,是以ApplicationContext为核心的接口设计.咱们经常使用的应用上下文主要都是WebApplicationContext或者ConfigurableApplicationContext的实现.
这里涉及的是主要接口关系,而具体的IOC容器都是在这个接口体系下实现的.
2.1 BeanFactory的应用场景
BeanFactory 接口定义了IOC容器的最基本形式,并提供了IOC容器应该遵照的最基本的服务契约.
用户使用容器的时候,可使用转义字符"&"来获取FactoryBean自己.例如myJndiObject是一个FactoryBean,那么使用&myJndiObject获取到的是FactoryBean,而不是这个FactoryBean产生出来的对象.
BeanFactory和FactoryBean:一个是Factory,也就是IOC容器的对象工厂;一个只是一个Bean.在Spring中,全部的Bean都是由BeanFactory来进行管理的.
BeanFactory接口设计了getBean方法,这个方法是使用IOC容器API的主要方法,经过这个方法,能够取得IOC容器中管理的Bean.有了BeanFactory的定义,咱们能够执行如下操做:
2.2 BeanFactory容器的设计原理
BeanFactory接口提供了使用IOC容器的规范.在这个基础上,Spring还提供了不少符合这个IOC容器接口的一系列容器供开发人员使用.咱们以XmlBeanFactory的实现为例来讲明IOC容器的设计原理.
做为一个简单IOC的最底层实现的XmlBeanFactory,他有一个很是明显的特征:他只提供最基本的IOC容器的功能.这一点和ApplicationContext是有区别的.
XmlBeanFactory继承自DefaultListableBeanFactory.而DefaultListableBeanFactory实际上包含了基本IOC所具备的重要功能.XmlBeanFactory是一个能够以XML方式定义的BeanDefinition的IOC容器.对这些XML文件定义信息的处理其实并非由XmlBeanFactory直接完成的.在XmlBeanFactory中,初始化了一个final的XmlBeanDefinitionReader,对XML形式的信息处理实际上也是由他完成的.