说说控制反转和依赖注入

说说控制反转和依赖注入

本篇文章虽然很简单,但是各有各的理解,如果有哪位小伙伴有不同的理解,或文中有什么错误,可以在留言处留言。大家一起讨论。

IoC,英文全名:Inversion of control,直译过来就是控制反转

控制反转

说到控制反转,我们从字面意思来看,可以提出三个疑问:谁控制谁?控制什么?为何是反转,反转了什么?

在说控制反转之前,我们先来举一个很好理解的例子。

我现在需要去买一套房,我的要求是价格便宜、户型好、坐北朝南、附近有商业街、地铁、送车位...等等一些条件,要去找这么一套房子,需要我自己亲自去找。为了避免这种麻烦,出现了房产中介,我们只要把我们的要求告诉中介,中介就会介绍合适的房子的给我们。

我们可以将上面的过程描述成一个控制反转。在没有房产中介之前,我需要自己亲自找房子。有了房产中介之后,我可以通过中介找房子,中介找到之后,再来通知我。这里就发生了反转,是房产中介执行了找房的流程,而之前是我自己找房子,反转了找房的流程。

我们来还原一下现场,我们将房子还原为对象,我还原为应用程序,房产中介还原为 IoC框架。在之前,应用程序需要自己执行找对象和创建对象的流程。有了 IoC框架之后,不需要应用程序去寻找和创建对象了,我们依赖 IoC 框架来控制查找和创建对象的流程。这里就发生了反转,控制的对象发生了反转。现在来解答一下之前的三个疑问。

  • 谁控制谁? 反转之前,应用程序控制对象,反转之后,IoC框架控制对象。
  • 控制什么? 控制的是创建对象的执行流程。
  • 为何是反转,哪些方面反转了 反转对象的依赖,传统程序中,是对象自己去查找和依赖对象,而在Spring中,通过IoC容器查找和注入依赖。所谓反转,反转了依赖对象的获取方式。

控制反转并不是一种具体的实现技巧,而是一种设计思想

在Spring 官方文档中,有这么一句话IoC is also known as dependency injection (DI).,翻译过来就是:IoC也可以被称为依赖注入。也就是说,DI和IoC是一个概念,他们只是同一概念的不同描述

依赖注入

依赖注入

什么是依赖注入?是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。

引用Iteye以为大神对依赖注入的解释:

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

  • 谁依赖于谁: 应用程序依赖于IoC容器;
  • **为什么需要依赖:**应用程序需要IoC容器来提供对象需要的外部资源;
  • **谁注入谁:**很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
  • **注入了什么:**就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

我们就不对上面的讲述做具体的例子了。后面如果有新的理解,再来继续补充。

最后推荐几篇关于Spring IOC 的文章:

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://baozi.fun/2020/02/23/说说控制反转和依赖注入

Buy me a cup of coffee ☕.