如何理解IoC/DI

IoC:Inversion of Control,控制反转
DI:Dependency Injection,依赖注入

要理解上面两个概念,就必须搞清楚如下的问题:

参与者都有谁?
依赖:谁依赖于谁?为什么需要依赖?
注入:谁注入于谁?到底注入什么?
控制反转:谁控制谁?控制什么?为什么叫反转(有反转就应该有正转了)?
依赖注入和控制反转是同一概念吗?

下面就来简要地回答一下上述问题,把这些问题搞明白了,也就明白IoC/DI了。
(1)参与者都有谁:一般有三方参与者,一个是某个对象;另一个是IoC/DI容器(譬如Spring);还有一个是某个对象的外部资源。
Tips:某个对象指的是任意的、普通的Java对象;IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;
对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称为资源,譬如,对象需要的其它对象,或者是对象需要的文件资源等。

(2)谁依赖于谁:当然是某个对象依赖于IoC/DI的容器
(3)为什么需要依赖:对象需要IoC/DI的容器来提供对象需要的外部资源
(4)谁注入谁:很明显是IoC/DI的容器把某个对象需要的资源注入此对象
(5)到底注入什么:就是注入某个对象所需要的外部资源
(6)谁控制谁:当然是IoC/DI的容器来控制对象了
(7)控制什么:主要是控制对象实例的创建
(8)为何叫反转:反转是相对于正向而言的,那么什么算是正向的呢?
考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?
一般会使用组合,直接去创建C的对象,也就是说,在A类中主动去获取需要的外部资源C,这种情况被称为正向的。
那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向地注入到A类中
主动去取是正向,被动接收就反向,从正向改为反向,就称为反转

(9)依赖注入和控制反转是同一概念吗?
依赖注入和控制反转是对同一事情的不同角度的描述。
依赖注入是强调某个对象获取需要的资源的方式;控制反转强调的是指某个对象在获取所需资源是主动还是被动
从某个方面讲,就是它们描述的角度不同。
依赖注入是从应用程序的角度去描述,可以把依赖注入描述得完整点:应用程序依赖容器创建并注入它所需要的外部资源;
而控制反转是从容器的角度去描述,描述的完整点就是:容器控制应用程序,由容器反向地向应用程序注入其所需要的外部资源。

IoC/DI的进步是编程思想上“主从换位”的变化。应用程序原来是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,
应用程序就变成被动的了,被动地等待IoC/DI容器来创建并注入它所需要的资源。

IoC/DI的目标是代码复用、解耦。当然,程序的体系结构也变得非常灵活。

如何理解IoC/DI

时间: 2024-10-06 17:03:23

如何理解IoC/DI的相关文章

深入理解IoC/DI

------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁? 控制什么? 为何叫反转(对应于正向)?哪些方面反转了?为何需要反转? 谁控制谁?  --> IoC/DI容器控制应用程序 控制什么? --> IoC/DI容器控制对象本身的创建.实例化; IoC/DI容器控制对象之间的依赖关系 为何叫反转(对应于正向)? --> 因为现在应用程序不能主动

6. Laravel5学习笔记:IOC/DI的理解

介绍 IOC 控制反转 Inversion of Control 依赖关系的转移 依赖抽象而非实践 DI 依赖注入 Dependency Injection 不必自己在代码中维护对象的依赖 容器自动根据配置,将依赖注入指定对象 IOC.DI对于Laravel的意义 Laravel框架的基础是一个功能强大的控制反转容器(IoC container). 为了真正理解该框架,需要好好掌握该容器.然而我们需要了解,控制反转容器只是一种用于方便实现"依赖注入"的工具.但要实现依赖注入并不一定需要

工厂方法模式与IoC/DI

IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 1:如何理解IoC/DI 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)? 依赖注入和控制反转是同一概念吗? 下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了.(1)参与者都有谁: 一般有三方参与者,

设计模式-IoC/DI

转(http://www.cnblogs.com/sjms/archive/2010/06/19/1760692.html) IoC--Inversion of Control  控制反转  DI--Dependency Injection   依赖注入 1:如何理解IoC/DI         要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)?

Spring -- IOC/DI 基础概念的理解

Spring -- IOC/DI 基础概念 思维导图: ------------------------------------------------------- IoC/DI 的基本概念 IoC是什么 ? IoC -- Inversion of control, 控制反转   在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则. 理解IoC的关键是明

对DIP IoC DI的理解与运用

DIP,IoC,DI基本概念 依赖倒置原则(DIP,Dependency Inverse Principle):强调系统的“高层组件”不应当依赖于“底层 组件”,并且不论是“高层组件”还是“底层组件”都应当依赖于抽象.抽象不应当依赖于实现,实现应当依赖于抽象. 依赖(Dependency):组件A如果:①持有B的引用,②调用B的方法,③创建(new)B,则A对B产生依赖. 控制(Control):A依赖B,则B拥有“控制权”,因为B的某种变化可能会引起A的变化. 控制反转(IoC,Inverse

spring ioc DI 理解

下面是我从网上找来的一些大牛对spring ioc和DI的理解,希望也能让你对Spring ioc和DI的设计思想有更进一步的认识. 一.分享Iteye的开涛对Ioc的精彩讲解 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们

spring IOC/DI容器的理解

参与者:应用程序和spring正向:现在的程序方向,A对象要使用B对象,现在是A里面直接创建B的实例,然后调用.publc class A{ void t1(){ new B().t2();  }}public class B{void t2(); 简而言之,就是程序需要什么.就由程序主动去获取需要的资源,这个方向就是正向.容器是用来创建和装配对象,并管理对象生命周期的.对于应用程序而言,就是被动实例化和被动接受依赖了.装配:在spring容器内拼凑bean叫作装配.装配bean的时候,你是在告

简单理解IoC与DI

为了理解Spring的IoC与DI从网上查了很多资料,作为初学者,下面的描述应该是最详细,最易理解的方式了. 首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好.qq号.电话号.ip号.iq号………,想办法认识她们,