在[软件工程](https://zh.wikipedia.org/wiki/軟件工程)中，**依赖注入**（dependency injection）的意思为，给予调用方它所需要的事物。

编程语言层次下，“调用方”为对象和类，“依赖”为变量。

在提供服务的角度下，“调用方”为客户端，“依赖”为服务。

应该尽可能的让依赖类在最上层初始化



## 举例

例如，我要一辆车，那么就需要轮胎，我需要一个轮胎，那么就需要一个轮毂，若干螺丝，外胎，内胎，刹车……

那么问题就来了。我应该做的是造车的时候再种橡胶树么？

这样不对啊。

我们应该做的是，在造车的时候，就发现已经有了生产完全的轮胎，直接调用轮胎装上去就行了。至于轮胎里面需要什么东西，我不是重新做，而是直接调用现成的东西。



## 方案

1、作为构造函数的参数注入

2、提供 Setter 设置值注入

3、接口注入



