当前位置: 首页 > 面试题库 >

什么是控制反转?

宋智明
2023-03-14
问题内容

第一次遇到控制反转(IoC)时可能会造成很大的混乱。

  1. 它是什么?
  2. 它解决什么问题?
  3. 什么时候合适,什么时候不合适?

问题答案:

控制反转(IoC)和依赖注入(DI)模式都是关于从代码中删除依赖的。

例如,假设您的应用程序具有文本编辑器组件,而您想提供拼写检查。您的标准代码如下所示:

public class TextEditor {

    private SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

我们在这里所做的创建了TextEditor和之间的依赖关系SpellChecker。在IoC场景中,我们改为执行以下操作:

public class TextEditor {

    private IocSpellChecker checker;

    public TextEditor(IocSpellChecker checker) {
        this.checker = checker;
    }
}

在第一个代码示例中,我们实例化了SpellCheckerthis.checker = new SpellChecker();),这意味着TextEditor该类直接依赖于SpellChecker该类。

在第二个代码示例中,我们通过SpellCheckerTextEditor构造函数签名中具有依赖项类来创建抽象(而不是在类中初始化依赖项)。这使我们可以调用依赖项,然后将其传递给TextEditor类,如下所示:

SpellChecker sc = new SpellChecker; // dependency
TextEditor textEditor = new TextEditor(sc);

现在,创建TextEditor类的客户端可以控制SpellChecker要使用的实现,因为我们将依赖项注入了TextEditor签名中。



 类似资料:
  • 借助Spring实现具有依赖关系的对象之间的解耦。 对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。 获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。

  • 你可以把一个版本控制系统(缩写VCS)理解为一个“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。 版本控制与项目的种类,使用的技术和基础框架并无关系: 无论是设计开发一个HTML网站或者是一个苹果应用,它的工作原理都是一样的。 你可以选择任何你喜欢的工具来工作,它并不关心你

  • 问题内容: 我试图理解AOP,依赖注入和控制SPRING的反转相关概念,但是我很难理解。 谁能用简单的英语解释一下? 问题答案: 我了解您的困惑,花了一些时间来了解这些概念如何相互关联。所以这是我对这一切的解释(某种程度上是个人的): 1.控制反转 控制反转是一种设计原则,而不是通用的,它是指行为规范与实际执行时的行为脱钩。比较一下 与 在后者中, 没有直接调用 会更灵活。一般而言,控制反转与 观

  • 问题内容: 人们经常提到“依赖注入”和“控制反转”,这是使用Spring框架开发Web框架的主要优点。 如果可能的话,有人可以用一个简单的例子来解释它吗? 问题答案: 由于依赖注入, Spring有助于创建松耦合的应用程序。 在Spring中,对象定义其关联(依赖关系),而不必担心它们将如何获得这些依赖关系。Spring的责任是提供创建对象所需的依赖关系。 例如:假设我们有一个对象,并且它对对象有

  • 什么是微控制器,为什么需要微控制器? 在阅读Arduino 文档的时候, Arduino是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的Arduino板)和软件(ArduinoIDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nic

  • 本文向大家介绍什么是反射?相关面试题,主要包含被问及什么是反射?时的应答技巧和注意事项,需要的朋友参考一下 反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。