gpt4 book ai didi

dependency-injection - 通过构造函数注入(inject)和通过 Guice 的字段注解注入(inject)有什么区别?

转载 作者:行者123 更新时间:2023-12-04 08:20:10 26 4
gpt4 key购买 nike

我有下面的代码来使用 Guice 进行依赖注入(inject)。第一个是使用构造函数注入(inject),而另一个是直接在字段上方添加 @Inject。这两种方式有什么区别吗? Guice官网似乎推荐构造函数注入(inject)。

class BillingService {
private final CreditCardProcessor processor;
private final TransactionLog transactionLog;

@Inject
BillingService(CreditCardProcessor processor, TransactionLog transactionLog) {
this.processor = processor;
this.transactionLog = transactionLog;
}
...
}

还有:

class BillingService {
@Inject
private final CreditCardProcessor processor;
@Inject
private final TransactionLog transactionLog;
BillingService() {

}
...
}

最佳答案

我要指出的差异:

  • 如果没有构造函数注入(inject),您将无法使用 final 修饰符,即您上面的代码将无法编译。在这里评论最终成员的优势是题外话。
  • 使用构造函数注入(inject),所有依赖项都是强制性的。如果不知道每个声明的依赖项,您将无法实例化该类。
  • 使用构造函数注入(inject)编写测试用例可能会更容易(参见 The111 的答案)。
  • 还有另一种类型的 DI - setter 注入(inject) - 它可以更自然地与构造函数注入(inject)混合(例如,用于分离强制和可选依赖项)。

关于dependency-injection - 通过构造函数注入(inject)和通过 Guice 的字段注解注入(inject)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40966662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com