坑系列 (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)
优点:
- 松耦合,易于功能复用,方便测试,使得成程序的整个体系结构变得非常灵活;
参考文章链接:
- 控制反转和依赖注入的理解(通俗易懂) (看这个标题,就知道为啥选择它了吧🤞,最喜欢这个排版,图文并茂啊,优秀范例👍)
- 轻松了解Spring中的控制反转和依赖注入(一) (大牛写的系列文章👍,有代码解释,还没有看完)
- https://www.iteye.com/blog/jinnianshilongnian-1413846 (大牛的系列文章,有推荐英文版本哦)
本文来自博客园,作者:77工作室,转载请注明原文链接:https://www.cnblogs.com/z7luv/p/15239620.html
如果您觉得阅读本文对您有帮助,请点击一下右下方的推荐按钮,您的推荐将是我写作的最大动力!版权声明:本文为博主原创或转载文章,欢迎转载,但转载文章之后必须在文章页面明显位置注明出处,否则保留追究法律责任的权利。