提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
multipleObjtest分支使用(同一类型提供多实现)
预定义限定符(@ApplicationContext @ActivityContext)
基础知识
一、依赖注入是什么?
类通常需要引用其他类。例如,Car
类可能需要引用 Engine
类。这些必需类称为依赖项,在此示例中,Car
类依赖于拥有 Engine
类的一个实例才能运行。
类可通过以下三种方式获取所需的对象:
- 类构造其所需的依赖项。在以上示例中,
Car
将创建并初始化自己的Engine
实例。 - 从其他地方抓取。某些 Android API(如
Context
getter 和getSystemService()
)的工作原理便是如此。 - 以参数形式提供。应用可以在构造类时提供这些依赖项,或者将这些依赖项传入需要各个依赖项的函数。在以上示例中,
Car
构造函数将接收Engine
作为参数。
第三种方式就是依赖项注入!使用这种方法,您可以获取并提供类的依赖项,而不必让类实例自行获取。
下面是一个示例。在不使用依赖项注入的情况下,要表示 Car
创建自己的 Engine
依赖项,代码如下所示:
class Car {
private Engine engine = new Engine();
public void start() {
engine.start();
}
}
class MyApp {
public static void main(String[] args) {
Car car = new Car();
car.start();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APaBp33c-1670170591309)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
这段代码直接通过Car类的new方法通过申请一片内存空间创建一个新的engine对象,但是这显然不能不能满足我们要求,
首先,Car 类一旦被实例化,就会伴随着 Engine 类的实例化,也就使得 Car 类在实例化时必须知道 Engine 类的实例化需要哪些条件,在我们的例子中就是 PetrolEngine 类实例化需要的条件。
其次,对 Engine
的强依赖使得