您的位置:首页 > 编程语言 > Java开发

《spring技术内幕》学习(二)ioc容器实现

2015-12-15 19:58 288 查看

ioc容器和依赖反转模式

在面向对象领域中,如果相互合作的对象的引用和依赖关系的管理由具体对象来完成,那么会导致代码的高度耦合和可测试性的降低,这是非常不利的。而这些依赖关系可以通过把对象的依赖注入交给框架或者ioc容器来完成,这就是依赖控制反转。

依赖控制反转有很多种方式,在spring中,ioc容器是这个模式的载体,它可以通过接口注入、setter注入、构造器注入这三种主要方式完成依赖注入。同时依赖注入可以使递归的。

这里有一个问题,就是什么样的对象适合依赖注入?通常来说,面向对象系统中有很大一部分对象是来处理数据的,这些对象并不常发生变化,是系统中的基础部分,很多时候以单例模式存在,它们不涉及数据和状态共享等问题。同时,如果这些对象之间的相互依赖关系也是比较稳定的,一般不会随着系统运行状态的改变而改变,这些特性使这些对象非常适合由ioc容器管理。

ioc容器的设计与实现

spring ioc容器的设计主要围绕的是两个核心接口:BeanFactory和ApplicationContext

其中BeanFactory是实现容器最基本功能的简单容器,而ApplicationContext应用上下文是作为容器的高级形态存在,spring框架围绕这两个接口定义了一套复杂的接口继承体系,用来抽象出容器的很多功能。简单上个图:



在这些接口和类的继承体系基础上,spring通过定义BeanDefinition来管理对象,BeanDefinition抽象了我们对bean的定义。对ioc容器来说,BeanDefinition就是对依赖反转模式中管理的对象依赖关系的数据抽象,也是容器实现依赖反转功能的核心数据结构。

为了了解BeanFactory和ApplicationContext两个核心接口的继承体系,我们先看一下ioc容器主要的接口设计图:



从图中可以看到BeanFactory有一条主要的设计路径,BeanFactory–>HierarchicalBeanFactory–>ConfigurableListableBeanFactory,其中BeanFactory定义了基本的ioc容器规范,HierarchicalBeanFactory继承了BeanFactory接口后,增加了getParentBeanFactory()接口的功能,使BeanFactory具备了双亲ioc容器的管理功能

BeanFactory都定义了哪些接口呢?我们可以看一下spring源代码的截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: