IoC/DI 简介
IoC
IoC(英文全称为 Inversion of Control,中文译名为控制反转)是一种设计思想。在传统程序中,需要的对象(也可称之为依赖对象)都由编程开发人员直接控制(包括创建、销毁,如通过 new 的方式创建一个对象),这个可以理解为正转;而在 IoC 设计思想中,需要的对象由某个容器来控制(包括创建、销毁和注入),对象的控制权不再归属于编程人员,而归属于容器,这个就可以理解为反转。
为什么会出现 IoC
传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了 IoC 容器后,把创建依赖对象的控制权交给了容器,由容器进行注入依赖对象,所以对象与对象之间是松耦合,这样也方便测试,有利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
Spring 框架中的 IoC
IoC 是 Spring 框架的核心,对象的生命周期和对象间的关系均由 Spring 框架中的 IoC 容器控制。通俗地说,所有的类都会在容器中登记,告诉容器你是什么,你需要什么,然后容器会在系统运行到适当的时候,把你要的主动给你(创建 + 注入),同时也把你交给其他需要你的对象。
DI
DI(英文全称为 Dependency Injection,中文译名为依赖注入)是 IoC 的别名。可以简单理解为,容器创建某个依赖对象,并将该依赖对象注入到需要该依赖对象的地方(也可称之为被注入对象)。
DI 的出现
由于控制反转概念比较含糊,所以在 2004 年大师级人物 Martin Fowler 又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖 IoC 容器来配置依赖对象”
Spring 框架中的 DI
Java 1.3 之后提供了一个重要特征——反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,Spring 框架就是通过反射机制来实现依赖注入的。
网友评论