, например).

оложим, что у меня есть два класса, первый класс без каких-либо свойств, полей или аннотаций:

public class B {}

И класс, в который вводят B, вот так:

public class A {
    @Inject
    private B b;

    public B getB() {
        return b;
    }
}

Теперь класс A довольно бесполезен, пока мы его не используем, поэтому есть два варианта:

@ Введите этоСоздайте его вручную, используя верный "new A ()"

Если A вводится, CDI управляет им и достаточно любезен, чтобы ввести B, который имеет неявную область действия @Dependent. Круто, именно то, что я хочу.

Однако, если я вручную создаю A (скажем, на фабрике или в сборщике), CDI полностью игнорирует мой объект и не вводит объект типа B.

Пример, о котором я говорю, когда он не работает, здесь объект a всегда останется нулевым:

public class Builder {
    @Inject
    private A a;

    public static Builder ofTypeSomething() {
        // do some magic here
        return new Builder();
    }

    private Builder() {
        // and some more here
    }
}

Почему это не работает?

Класс A является допустимым управляемым компонентом и имеет действительную область видимости, как и класс B. Даже если я добавлю @Producer к статическому методу, он ничего не изменит (что хорошо, потому что идея статического метода заключается в вызове это, чтобы не вводить Builder в любом месте).

Ответы на вопрос(1)

Ваш ответ на вопрос