坑系列 (Angular 2+ ) -> 控制反转C(Inversion of Control)和 依赖注入DI(Dependency Injection)

       控制反转IOC和 依赖注入DI 这两个概念其实有太多优秀的文章,由浅入深,从不同的角度,再到不同的比喻进行了讲解,对于新手的我来说,看完之后,好像看了又没完全看, 回头摸索实践,还是总有种似懂非懂,懂了又没完全懂 (‘X了又没完全XXX’句式是2021年某个梗 嘻嘻😁)。所以记录一篇文章,用于反复查看~


正文来喽~


概念:

       控制反转,顾名思义,是将控制的主动权交给了被动的一方。

       控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方。

       比如,客户端/应用程序,如果想获取什么资源都是主动出击,主动创建对象;而在IOC/DI思想下,客户端/应用程序是被动的接受ioc 容器来创建并注入它所需要的资源。

       Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想,一个重要的面向对象编程的法则。

       IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

       Ioc — 是专门用来创建对象的工厂,改变了之前的依赖关系,所有都依赖于IOC 容器了。即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

       E.g :
       传统的概念,相当于自己主动去找对象,自己打听对方的爱好、信息等等,而IOC 类似于婚姻介绍所, 你只需要把自己的择偶标准给它,那么它就帮你找到符合你标准的对象,如果找到不符合你标准的,就会自己报错,所有的过程只需要ioc来处理,也就是说从对象的创建到销毁,都由这个容器来处理,你只需要被动的接受。

 

依赖注入DI(Dependency Injection):

       组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

       如何向某个对象添加它所需要的其他对象,是由DI 来实现的。

       IoC和DI由什么关系呢?其实它们是同一个概念的不同角度描述,是IOC 的另一种说法。IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI来实现的。相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

       依赖注入的三种角色:使用者、服务(依赖对象)及注入器(Injector)

 

优点:

  1. 松耦合,易于功能复用,方便测试,使得成程序的整个体系结构变得非常灵活;

 

 

 

参考文章链接:

  1. 控制反转和依赖注入的理解(通俗易懂)  (看这个标题,就知道为啥选择它了吧🤞,最喜欢这个排版,图文并茂啊,优秀范例👍)
  2. 轻松了解Spring中的控制反转和依赖注入(一)  (大牛写的系列文章👍,有代码解释,还没有看完)
  3. https://www.iteye.com/blog/jinnianshilongnian-1413846  (大牛的系列文章,有推荐英文版本哦)
posted @ 2023-04-30 16:30  77工作室  阅读(28)  评论(0编辑  收藏  举报