控制反转,依赖反转原理和依赖注入如何关联?

时间:2018-09-17 13:30:38

标签: design-patterns design-principles

我知道使用依赖注入/服务定位器设计模式/等。我们正在实现控制反转。但是依赖倒置原则适合什么地方?还是与这两个完全分开?

  1. 我们也可以使用DIP实现IOC吗?
  2. DIP是否与IOC或DI有关?

1 个答案:

答案 0 :(得分:0)

例如,如果类A对类B有依赖关系,则通过依赖关系反转重构此依赖关系将导致类A取决于由类B实现的接口B。

  • 重构之前:A类---> B类
  • 重构后:A类--->接口B <--- B类

简而言之,依赖倒置原则指出,您的高层抽象(例如,A类)和低层抽象(例如,B类)都不应依赖于具体的东西(因为A类在重构之前依赖于B类),但是被中间的抽象层(Interface B抽象)解耦。

依赖倒置用作实现依赖注入的一种方式。例如,在春季,

interface AbstractB {

}

@Component
class ConcreteB implements AbstractB {

}

@Component 
class ConcreteA {

    @Autowired
    // note reference type is AbstractB
    private AbstractB concreteB;

}
  • 根据混凝土A中类型AbstractB(而不是ConcreteB)的引用,我们将应用依赖倒置
  • 通过使用@Autowired并让Spring为我们注入该依赖性(而不是使用'new'关键字自己实例化),我们正在使用依赖性注入
  • 控制反转是允许外部框架(在此示例中为Spring IoC容器)实例化依赖项并将其注入代码的原理。

关于“我们是否也使用DIP实现IOC吗?”,在我看来,这不是必需的,因为我们可以使用ConcreteB类型的Reference自动布线,实现IoC和DI,但违反了DIP。

这能回答您的问题吗?