《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源代码的截图:
相关文章推荐
- spring-session源码解读-5
- Spring AOP实现方式
- JAVA设计模式之抽象工厂模式
- java设计模式之建造者模式
- Java中堆内存和栈内存详解
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- JAVA设计模式之原型模式
- JAVA设计模式之代理模式
- Eclipse无法启动报An internal error occurred during: "reload maven project". java.lang.NullPointerException
- Java内存管理:深入Java内存区域(深入理解Java虚拟机的第2章内容,加上个人浅显理解)
- JAVA设计模式之享元模式
- JAVA设计模式之门面模式(外观模式)
- 使用java开发文本全局搜索器
- JAVA设计模式初探之装饰者模式
- JAVA设计模式初探之组合模式
- JAVA设计模式初探之适配器模式
- java 垃圾回收机制
- Java中LOCK和synchronized区别
- JAVA设计模式初探之桥接模式
- java集合——树集(TreeSet)+对象的比较