美文网首页Java
控制反转,依赖反转是什么?

控制反转,依赖反转是什么?

作者: 高大强19 | 来源:发表于2020-05-31 19:09 被阅读0次

“依赖反转”这个概念指的是“谁跟谁”的“什么依赖”被反转了?“反转”两个字该如何理解?

我们还经常听到另外两个概念:“控制反转”和“依赖注入”。这两个概念跟“依赖反转”有什么区别和联系呢?它们说的是同一个事情吗?

如果你熟悉 Java 语言,那 Spring 框架中的 IOC 跟这些概念又有什么关系呢?

控制反转(IOC)

在讲“依赖反转原则”之前,我们先讲一讲“控制反转”。控制反转的英文翻译是 Inversion Of Control,缩写为 IOC。此处我要强调一下,如果你是 Java 工程师的话,暂时别把这个“IOC”跟 Spring 框架的 IOC 联系在一起。

依赖注入(DI)

依赖注入跟控制反转恰恰相反,它是一种具体的编码技巧。依赖注入的英文翻译是 Dependency Injection,缩写为 DI。对于这个概念,有一个非常形象的说法,那就是:依赖注入是一个标价 25 美元,实际上只值 5 美分的概念。也就是说,这个概念听起来很“高大上”,实际上,理解、应用起来非常简单。

那到底什么是依赖注入呢?我们用一句话来概括就是:不通过 new() 的方式在类内部创建依赖类对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类使用。

依赖注入框架(DI Framework)

弄懂了什么是“依赖注入”,我们再来看一下,什么是“依赖注入框架”。我们还是借用刚刚的例子来解释。

在采用依赖注入实现的 Notification 类中,虽然我们不需要用类似 hard code 的方式,在类内部通过 new 来创建 MessageSender 对象,但是,这个创建对象、组装(或注入)对象的工作仅仅是被移动到了更上层代码而已,还是需要我们程序员自己来实现。

依赖反转原则(DIP)

前面讲了控制反转、依赖注入、依赖注入框架,现在,我们来讲一讲今天的主角:依赖反转原则。依赖反转原则的英文翻译是 Dependency Inversion Principle,缩写为 DIP。中文翻译有时候也叫依赖倒置原则。

1. 控制反转

实际上,控制反转是一个比较笼统的设计思想,并不是一种具体的实现方法,一般用来指导框架层面的设计。这里所说的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程通过框架来控制。流程的控制权从程序员“反转”给了框架。

2. 依赖注入

依赖注入和控制反转恰恰相反,它是一种具体的编码技巧。我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类来使用。

3. 依赖注入框架

我们通过依赖注入框架提供的扩展点,简单配置一下所有需要的类及其类与类之间依赖关系,就可以实现由框架来自动创建对象、管理对象的生命周期、依赖注入等原本需要程序员来做的事情。

4. 依赖反转原则

依赖反转原则也叫作依赖倒置原则。这条原则跟控制反转有点类似,主要用来指导框架层面的设计。高层模块不依赖低层模块,它们共同依赖同一个抽象。抽象不要依赖具体实现细节,具体实现细节依赖抽象。

相关文章

  • 6.Spring IoC练习

    1. 依赖注入和控制反转 依赖注入和控制反转IoC是什么Ioc—InversionofControl,即“控制反转...

  • spring源码系列一 IoC 和 DI

    IoC 是什么 IoC:Inversion of Control 控制反转,也称依赖倒置(反转)IoC 不是什么技...

  • spring IOC_DI _AOP

    IOC:控制反转,什么为控制反转?要反转的是什么,反转的是角色。在传统代码中如果A类依赖B类,A类需要到B类才能完...

  • 控制反转,依赖反转是什么?

    “依赖反转”这个概念指的是“谁跟谁”的“什么依赖”被反转了?“反转”两个字该如何理解? 我们还经常听到另外两个概念...

  • 控制反转和依赖注入

    依赖 控制反转(Inversion of Control)、依赖反转(Dependency Inversion P...

  • learn go with tests 学习笔记(四)依赖注入

    知识点 依赖注入举例 首先我们应该明白什么是控制反转 -> 控制反转(IoC)与依赖注入(DI)控制反转的目的很简...

  • 依赖注入

    参考:依赖注入原理 1.依赖注入是什么 依赖注入是控制反转的一种实现方式那什么是控制反转?? objA需要使用B接...

  • JAVA IOC 与 DI

    依赖倒置、控制反转和依赖注入的区分 依赖倒置、控制反转和依赖注入的区分依赖倒置(Dependency Invers...

  • IOC和EI

    IOC:控制反转(Inversion of Controller),对象的依赖关系被反转了,反转给IOC容器进行管...

  • 控制反转

    什么是控制反转(IOC),什么是依赖注入(DI)?问题:什么是控制反转(IOC),什么是依赖注入(DI)?IOC:...

网友评论

    本文标题:控制反转,依赖反转是什么?

    本文链接:https://www.haomeiwen.com/subject/weurzhtx.html