首页 > 解决方案 > 依赖注入:应该先做哪个?属性(字段)或依赖项?

问题描述

我是依赖注入的新手,我有一些问题。

首先我知道这一点:

来自 Christoffer Noring,Pablo Deeleman 的书“Learning Angular - Second Edition”:

随着我们的应用程序的增长和发展,我们的每个代码实体 都将在内部需要其他对象的实例,这些对象在软件工程领域中更为人所知的是依赖关系。将此类依赖项传递给依赖客户端的操作称为注入。

然后,在一些教程视频中,教练说我们想在 Car 类中使用轮胎服务,所以我们将它注入到 Car 类中,然后我们将创建一个属性(轮胎)来保存它:

public class Car {

    private Tires tires; 

    public Car(Tires tires){
        this.tires = tires;
    }
}

我不同意这个定义,这让我感到困惑,因为我认为这个定义(教师的定义)与另一个定义形成对比。

大多数关于 DI 的文章(与关于 Angular 相同)告诉我们,由于我们需要类中其他类对象的实例,所以我们有一些依赖类。但是在这个定义中,它告诉我们有来自不同类的对象,我们想要将它注入到你的类中,你应该创建一些变量来保存这些值。

我认为令人困惑的问题是属性创建的时间。我认为首先我们创建属性然后我们有一些依赖关系,而不是假设某个类作为依赖关系,然后创建一些属性来将这些值保存在主机类中。(客户端类)

有人可以解释一下吗?

标签: javadependency-injectiondependenciesdependency-managementinject

解决方案


我想首先我们创建属性

我认为您可能会将 OOP 概念与注入混淆。

Car 服务类(与 OOP 无关),需要访问Tires 服务类,因此该Car实例期望Tires在构造期间注入一个实例,并且它需要保存以供以后使用,因此它将引用存储在一个字段中(不是属性1 )。

当我们决定需要保存注入的引用以供以后使用时,该字段被定义(声明为“创建”)。

我想你可以说当我们意识到我们需要对Tire服务的引用时定义(“创建”)该字段,然后将它作为依赖项添加到构造函数,但这只是你编写代码时的语义,即是否您在编写需要它的代码之前向前看并创建依赖关系,或者在编写代码时即时创建依赖关系。

1) 当我们有 getter(和 setter)方法供外部类使用时,使用“属性”一词。注入的引用仅供内部使用,不被视为类的“属性”。


推荐阅读