java - 依赖注入:应该先做哪个?属性(字段)或依赖项?
问题描述
我是依赖注入的新手,我有一些问题。
首先我知道这一点:
来自 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 相同)告诉我们,由于我们需要类中其他类对象的实例,所以我们有一些依赖类。但是在这个定义中,它告诉我们有来自不同类的对象,我们想要将它注入到你的类中,你应该创建一些变量来保存这些值。
我认为令人困惑的问题是属性创建的时间。我认为首先我们创建属性然后我们有一些依赖关系,而不是假设某个类作为依赖关系,然后创建一些属性来将这些值保存在主机类中。(客户端类)
有人可以解释一下吗?
解决方案
我想首先我们创建属性
我认为您可能会将 OOP 概念与注入混淆。
您Car
服务类(与 OOP 无关),需要访问Tires
服务类,因此该Car
实例期望Tires
在构造期间注入一个实例,并且它需要保存以供以后使用,因此它将引用存储在一个字段中(不是属性1 )。
当我们决定需要保存注入的引用以供以后使用时,该字段被定义(声明为“创建”)。
我想你可以说当我们意识到我们需要对Tire
服务的引用时定义(“创建”)该字段,然后将它作为依赖项添加到构造函数,但这只是你编写代码时的语义,即是否您在编写需要它的代码之前向前看并创建依赖关系,或者在编写代码时即时创建依赖关系。
1) 当我们有 getter(和 setter)方法供外部类使用时,使用“属性”一词。注入的引用仅供内部使用,不被视为类的“属性”。
推荐阅读
- reactjs - 使用 apollo 服务器在上下文中设置当前用户
- node.js - Firebase函数如何在Android中发送通知
- android - 在笔记本电脑中调试 Android Media Box 应用程序
- ios - ios中应用内购买中的应用用户与iTunes用户
- python - Sqlalchemy One - 一张表中的多和一
- wolkenkit - 在 wolkenkit writeModels 中使用外部代码
- regex - 如何编写保留部分字符串的正则表达式替换?
- linux - solaris 和 linux 页面缓存行为之间的区别
- javascript - 从 Javascript 中的经度和纬度获取城市、州、邮政编码
- angularjs - 如何在 angularjs 1.x 中制作自定义指令运行功能?