IOC控制反转

来源:互联网 发布:nodejs数据返回页面 编辑:程序博客网 时间:2024/06/05 15:58

以下来着百度词条:

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛

早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依赖注入。许多非凡的应用(比HelloWorld.java更加优美,更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。IoC 亦称为 “依赖倒置原理”("Dependency Inversion Principle")。差不多所有框架都使用了“倒置注入(Fowler 2004)技巧,这可说是IoC原理的一项应用。SmallTalk,C++, Java 或.NET 等各种面向对象程序语言的程序员已使用了这些原理。控制反转是Spring框架的核心。应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转。

个人理解:从计算机发展来说,计算机本身是为完成人的某种需要而发展而来的,但是随着人们的需求不断增加,当人们要完成某种需要时,不得不实现让计算机提前有某些功能,才能完成这项功能。这也就是所说的控制反转。本来所有事情,完成与不完成,怎样完成,都是由人决定的。而应用了计算机,必须某些负责的计算。必须依赖于某些计算。这些就不是人所能决定的。是由计算机所决定的。

底层对应:就其计算机底层有没有控制反转的例子呢。有一个例子是比较明显的。进程通信,在计算机中,任何权限处理都是由cpu来完成,如果进程间通信,原来是要告诉cpu下一步去唤醒或者形成那个进程。但是如果应用控制反转的概念,那么就有了进程之间的通信,进程本身也有权限。知道下一步该让那个进程执行。同样,在部分指令寻址的过程汇总也有应用。