Java Guice构造函数注入还是字段注入?
我对Guice不熟悉。施工人员注入优先还是现场注入优先 现场注入看起来既快又简单,但由于缺少构造函数,测试将是一个挑战Java Guice构造函数注入还是字段注入?,java,guice,Java,Guice,我对Guice不熟悉。施工人员注入优先还是现场注入优先 现场注入看起来既快又简单,但由于缺少构造函数,测试将是一个挑战 谢谢。想指出一些不同之处,以便您自己做出决定: 通过构造函数注入,您可以使用final修饰符。现场注射不能做到这一点。final成员的优点是离题的,您可以仔细阅读 使用构造函数注入编写测试用例很容易(正如您已经提到的) 对于构造函数注入,所有依赖项都是必需的。为了声明一个类,您需要知道它所需的所有依赖项 使用字段注入,您将隐藏类的依赖项,而不是使它们显式 以上只是需要考虑的
谢谢。想指出一些不同之处,以便您自己做出决定:
- 通过构造函数注入,您可以使用
修饰符。现场注射不能做到这一点。final
成员的优点是离题的,您可以仔细阅读final
- 使用构造函数注入编写测试用例很容易(正如您已经提到的)
- 对于构造函数注入,所有依赖项都是必需的。为了声明一个类,您需要知道它所需的所有依赖项
- 使用字段注入,您将隐藏类的依赖项,而不是使它们显式李>
final
支持。使用构造函数注入
在他们的报告中,Guice团队表示:
最小化可变性
尽可能使用构造函数注入来创建不可变对象。不可变对象简单、可共享,并且可以组合。按照此模式定义可注入类型:
[……]
注入方法和注入场
构造函数注入有一些限制:
- 注入构造函数可能不是可选的
- 除非由Guice创建对象,否则不能使用它。这是某些框架的交易破坏者
- 子类必须使用所有依赖项调用
。这使得构造函数注入非常麻烦,特别是当注入的基类发生变化时super()
这两种类型都很好。但您需要知道何时何地需要使用构造函数注入 构造函数注入的优点是
字段注入的优点是编码更少。当我使用word with Guice时,我只有构造函数注入。通常不建议使用字段注入。有关基本原理,请参见。尽管它是关于Spring的,但它也适用于其他依赖注入框架,包括Guice。
In Constructor Injection you can use something like this.
public class MemberResource {
private final IMemberService memberService;
@Inject
public MemberResource(IMemberService memberService) {
this.memberService = memberService;
}
}