白话解释:控制反转与依赖注入

  每个行业都有自己的术语,软件开发也不例外,有些术语如果仅看官方描述,会让初学者如坠云雾,比如”控制反转与依赖注入“,所以本次话题就是大白话解释什么叫”控制反转“,什么叫”依赖注入“。他们之间又是什么关系。

  要想知道什么是控制反转,就要先知道什么叫”正转“。

  假设我们在生活中,做任何事情都需要有2个事务的参与配合才能完成,比如:吃饭,描述的再具体点就是:我拿去筷子吃饭。这里出现2个事物,”我“和”筷子“,我每次吃饭都需要1双筷子。以面向对象的思维方式来说,“我“充当一个入口类,在这个入口类中,我每次吃饭的时候都要买一双一次性筷子(每一次使用都要new一次),在这样的关系下,是”我“(即调用者)每次都要”主动“去买一次性筷子(另一个类),我对筷子说你老老实实的过来我的手上,是我控制了筷子,这就是所谓的”控制正转“。

  那好,在这种控制正转的关系下,放在现实生活当中,肯定是不现实的,而且人是懒惰的,他总会去创造出更加方便自己生活的想法,更确切的做法是,买一双普通的筷子(非一次性),把他放在一个容器当中(在Spring中叫做IOC容器),你需要使用的时候就对容器说:IOC我想要用筷子(向容器发出请求),接着筷子就会”注入“到的手上,而在这个过程当中,你不再是控制方,反而演变成一名请求者(虽然本身还是调用者),依赖于容器给予你资源,控制权坐落到了容器身上,于是这就是人们俗称的控制反转

  所谓依赖注入,还是这个例子,筷子不是由“我”这个入口类自己new出来的,而是由外部创建,然后传递给“我”的,比如可以通过构造方法来传递,也可以使用set方法来传递,这种方式就叫做依赖注入。说白了就是“我”吃饭要依赖筷子,而筷子不是“我”自己在类内部new出来的,而是由外部注入进来的。 

  结论就是,所谓控制反转与依赖注入其实描述的都是一回事,简单的说就是要打破一个类与另一个类的紧耦合,只不过这2个术语描述的角度不同罢了。

  以前写的,补录到这里吧。

原文地址:https://www.cnblogs.com/ldq678/p/9572243.html