带有CDI +焊接的构造函数注入

问题描述 投票:1回答:1

我想使用构造函数注入,因为它使我的单元测试更安全,更容易编写:我不能忘记设置要注入的字段。 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社区根本不进行任何构造函数注入。

java dependency-injection cdi weld constructor-injection
1个回答
2
投票

这不是焊接错误。作为specification indicates,您的构造函数上需要@javax.inject.Inject。唯一不需要的时间是当您有一个零参数的构造函数,并且您不希望容器调用任何其他构造函数时。

© www.soinside.com 2019 - 2024. All rights reserved.