我想使用构造函数注入,因为它使我的单元测试更安全,更容易编写:我不能忘记设置要注入的字段。 CDI支持这一点,并且@Inject
注释的javadoc说:“ @Inject
对于不存在其他构造函数的公共,无参数构造函数是可选的。这使注入程序可以调用默认构造函数。”
我了解其他标准要求使用无参数的构造函数(例如JAX-RS;请参见this question),这真是令人讨厌。但即使是像这样的简单类:
public class Bar {
private final Foo foo;
public Bar(Foo foo) {
this.foo = foo;
}
}
焊接失败,说:DeploymentException: WELD-001408: Unsatisfied dependencies for type Bar
。当我添加@Inject
批注时,它可以工作。
我真的不希望Weld出现任何错误,因为它已经建立多年了;我可能出了点问题。但是也许它引起了人们的注意,只是因为Jakarta EE社区根本不进行任何构造函数注入。
这不是焊接错误。作为specification indicates,您的构造函数上需要@javax.inject.Inject
。唯一不需要的时间是当您有一个零参数的构造函数,并且您不希望容器调用任何其他构造函数时。