问题描述
我已经和Weld和CDI玩了几个月了,最近遇到了以下问题。
问题情况
- 使用Weld SE 3.1.5.Final
- 创建了一个CDI扩展程序,该扩展程序使用
SomeBean
添加了一个bean(@Observes AfterBeandiscovery abd
) -
SomeBean
是一个自定义bean,具有ArrayList.class
作为Class并返回1个限定符(@CustomQualifier
)。 - 然后,另一个bean(
DifferentBean
)声明一个@Inject @CustomQualifier ArrayList<String> variableName;
- 该注入点由于
Unsatisfied dependencies
而失败。
调查
从Bean验证报告中,我能够确定:
- Weld创建了2个Bean存档
- 使用:
- 标识符:MyProject \ build \ classes \ java \ main
- 类型:全部
- Beans.xml:未定义版本。
- 使用:
- 标识符:org.jboss.weld.environment.deployment.WeldDeployment.additionalClasses
- 类型:带注释的
- Beans.xml:没有bean.xml
- 使用:
- CDI扩展是位于存档1中的Bean。
-
DifferentBean
实例化的结果位于存档1中。- 此bean具有:
- 种类:已管理
- 类别:
my.package.DifferentBean
- 限定词:
@Default
- 范围:
@Dependent
- 此bean具有:
-
SomeBean
实例化的结果位于存档2中。- 此bean具有:
- 种类:合成
- 类:j.u.ArrayList
- 限定词:
@CustomQualifier
- 范围:
@ApplicationScoped
- 此bean具有:
原因
基于此,我假设出于某种原因,将我的自定义扩展名添加的SomeBean
添加到档案2中,因此无法从DifferentBean
所在的档案1中访问。
如果该评估是正确的,我该如何解决?
解决方法
我找到了问题所在。 我期望Weld将ArrayList.class的泛型解析为ArrayList。删除通用后,这种情况没有发生。