【问题标题】:Dependency Inversion vs Dependency Injection vs Inversion of Control依赖倒置与依赖注入与控制倒置
【发布时间】:2022-11-20 18:07:44
【问题描述】:

我试图找到关于依赖倒置、DI 和 IoC 之间区别的正确解释,并阅读许多文章以了解以下区别:

Inversion of Control vs Dependency Injection

https://betterprogramming.pub/straightforward-simple-dependency-inversion-vs-dependency-injection-7d8c0d0ed28e

但是,当我阅读有关该问题的新文章和有关 SO 的答案时,我变得更加困惑。因为,在Spring Documentation上,对于IoC也有如下的条款:

IoC 也称为依赖注入 (DI)

那么,您能否简单解释一下依赖倒置、依赖注入和控制倒置之间的区别?

【问题讨论】:

  • 在您提到的 spring 文档中,他们说:依赖注入而不是依赖倒置。因此,如果您了解依赖倒置和 IoC 之间的区别,那么您就很好
  • @Idriss你确定你读过这个问题吗?恐怕你连标题都没看,就发表了一些无用的评论。
  • 根据 spring 大声笑:依赖注入 = 控制反转。所以我们现在可以讨论这个问题:“依赖倒置与控制倒置”。您提到的第二个链接解释了所有内容。
  • 我不能保证 Spring 文档严格遵守这些定义,但请查看这些维基百科文章:en.wikipedia.org/wiki/Inversion_of_controlen.wikipedia.org/wiki/Dependency_injectionen.wikipedia.org/wiki/Dependency_inversion_principle

标签: java spring spring-boot dependency-injection inversion-of-control


【解决方案1】:

依赖注入(DI) 是一种避免强耦合的设计实践 类。

例一

interface IB{}

Class B implements IB {}

Class A {
IB ib;

public A(IB ib){
this.ib = ib;
}
}

它被认为是依赖注入,因为 ib 可以是实现此接口的任何东西。当你想测试类 A 时,你不需要实例化 IB,或者你可以用任何你想要的实例来实例化它。底线,A 类并不强烈依赖于 ib(或 B 类)

控制反转(IoC) 是一个概念,您,开发人员,将实例化控制权交给框架(例如 Spring)。因此,在编写良好的代码中,您不会看到构造函数的显式调用,因为框架会为您完成。 IoC 使用 DI 设计实践。

如果您需要更好的说明,请告诉我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 2015-03-14
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多