, например).
оложим, что у меня есть два класса, первый класс без каких-либо свойств, полей или аннотаций:
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 в любом месте).