Я хочу использовать Constructor Injection, поскольку это делает мои модульные тесты более безопасными и легкими для написания: я не могу забыть установить поля для инъекции. CDI поддерживает это, и javado c аннотации @Inject
говорит: «@Inject
является необязательным для publi c, конструкторов без аргументов, когда нет других конструкторов. Это позволяет инжекторам вызывать конструкторы по умолчанию».
Я понимаю, что другие стандарты требуют конструктора без аргументов (например, JAX-RS; см. этот вопрос ), что является обломом. Но даже для такого простого класса, как:
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 просто не делает никаких инъекций в конструктор.