Ioc理论(DI理论)基础

一、基本信息

英文全称:Inversion of Control
中文解释:多数书籍翻译成“控制反转”
别称:DI(Dependency Injection)理论
目的:用来实现对象(类)之间的“解耦”
提出者:软件专家Michael Mattson
使用了该理论的典型框架:spring
应用:很多的J2EE项目均采用了IOC框架产品Spring
解耦原理:把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。借助于“第三方”实现具有依赖关系的对象之间的解耦,这个第三方就是Ioc容器。

二、名称由来

1.IOC(控制反转)名称的由来:

软件系统在没有引入IOC容器之前,假如对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
软件系统在引入IOC容器之后,这种情形就完全改变了,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

2.DI(即“依赖注入”,是“控制反转”的别称)的名称由来与原理:

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

3.两种名称的关系:

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

三、通俗理解

1.什么是依赖:

手机需要一个耳机,可以理解为手机(当需要播放音乐时)依赖于耳机。

2.依赖注入的过程:

(1)将耳机插在手机上
(2)将耳机插在电脑上
依赖注入的本质应该是一次引用传递。

3.控制反转:

原来硬盘与计算机主板耦合在一起使用(各个组件在机箱里封装着使用),由计算机主板掌握硬盘的控制权。
现在硬盘与计算机主板解耦合了(把机器拆开,各个组件拿出来拼着用了),由用户掌握硬盘的控制权,计算机主板的控制权反过来也由别人(用户、Ioc容器)掌控了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章