一尘不染

什么是依赖注入?

spring

Spring是概念注入依赖的框架。

DI的目的是什么?它有什么好处?如何实施?


阅读 252

收藏
2020-04-19

共3个答案

一尘不染

DI的目的是什么?

依赖注入的目的是减少应用程序中的耦合,使其更灵活,更易于测试。

它有什么好处?

对象没有硬编码的依赖关系。如果你需要更改依赖项的实现,则要做的就是注入其他类型的Object。

如何实施?

有多种依赖注入方法。了解这些内容之后,就可以开始研究各种依赖注入框架。

2020-04-19
一尘不染

依赖注入将依赖传递给其他对象或框架(依赖注入器)。

依赖注入使测试更加容易。注入可以通过构造函数完成。

SomeClass() 其构造函数如下:

public SomeClass() {
    myObject = Factory.getObject();
}

问题:如果myObject涉及复杂的任务,例如磁盘访问或网络访问,则很难对其进行单元测试SomeClass()。程序员必须进行模拟,myObject并可能拦截工厂调用。

替代解决方案:

  • myObject作为参数传递给构造函数
public SomeClass (MyClass myObject) {
    this.myObject = myObject;
}

myObject 可以直接通过,这使测试更加容易。

  • 一种常见的替代方法是定义什么都不做的构造函数。依赖注入可以通过设置器来完成。(h / t @MikeVella)。
  • Martin Fowler记录了第三种选择(h / t @MarcDix),其中类显式实现了程序员希望注入的依赖项的接口。
    没有依赖注入的情况下,很难在单元测试中隔离组件。
2020-04-19
一尘不染

依赖注入基本上是提供对象需要的对象(其依赖),而不是让对象自己构造它们。这是一种非常有用的测试技术,因为它允许对依赖项进行模拟或存根。

可以通过多种方式将依赖项注入到对象中(例如构造函数注入或setter注入)。甚至可以使用专门的依赖项注入框架(例如Spring)来做到这一点,但是肯定不是必需的。你不需要那些框架具有依赖项注入。显式实例化和传递对象(依赖项)与框架注入一样好。

2020-04-19