Я играю с Weld и CDI уже несколько месяцев и недавно столкнулся со следующей проблемой.
Проблемная ситуация
- Использование Weld SE 3.1.5.Final
- Создано расширение CDI, которое добавляет компонент (
SomeBean
) с помощью@Observes AfterBeanDiscovery abd
. SomeBean
— это пользовательский компонент, который имеетArrayList.class
в качестве класса и возвращает 1 квалификатор (@CustomQualifier
).- Затем другой компонент (
DifferentBean
) объявляет@Inject @CustomQualifier ArrayList<String> variableName;
- Эта точка впрыска не работает из-за
Unsatisfied dependencies
.
Расследование
Из отчета о проверке компонентов я смог определить, что:
- Weld creates 2 Bean Archives
- With:
- Identifier: MyProject\build\classes\java\main
- Тип: Все
- Beans.xml: версия не определена.
- With:
- Identifier: org.jboss.weld.environment.deployment.WeldDeployment.additionalClasses
- Тип: Аннотированный
- Beans.xml: Нет beans.xml
- With:
- Расширение CDI — это bean-компонент, расположенный в архиве 1.
- The result of the
DifferentBean
instantiation is located in Archive 1.- This bean has:
- Kind: MANAGED
- Класс:
my.package.DifferentBean
- Квалификаторы:
@Default
- Объем:
@Dependent
- This bean has:
- The result of the
SomeBean
instantiation is located in Archive 2.- This bean has:
- Kind: SYNTHETIC
- Класс: j.u.ArrayList
- Квалификаторы:
@CustomQualifier
- Объем:
@ApplicationScoped
- This bean has:
Причина
Исходя из этого, я предполагаю, что по какой-то причине SomeBean
, которое добавляет мое пользовательское расширение, добавляется в архив 2 и, следовательно, недоступно из архива 1, где находится DifferentBean
.
Если эта оценка верна, как мне решить эту проблему?