0

我已经使用 Weld 和 CDI 玩了几个月了,最近遇到了以下问题。

问题情况

  • 使用 Weld SE 3.1.5.Final
  • 创建了一个 CDI 扩展,它SomeBean使用添加了一个 bean ( )@Observes AfterBeanDiscovery abd
  • SomeBean是具有ArrayList.classas 类并返回 1 个限定符 ( @CustomQualifier) 的自定义 bean。
  • 一个不同的 bean ( DifferentBean) 然后声明一个@Inject @CustomQualifier ArrayList<String> variableName;
  • 此注入点因Unsatisfied dependencies.

调查

从 Bean Validation Report 我已经能够确定:

  • Weld 创建 2 个 Bean 档案
    1. 和:
      • 标识符:MyProject\build\classes\java\main
      • 类型:全部
      • Beans.xml:版本未定义。
    2. 和:
      • 标识符:org.jboss.weld.environment.deployment.WeldDeployment.additionalClasses
      • 类型:带注释的
      • Beans.xml:没有 beans.xml
  • CDI 扩展是位于存档 1 中的 bean。
  • 实例化的结果DifferentBean位于存档 1 中。
    • 这个豆子有:
      • 种类:管理
      • 班级:my.package.DifferentBean
      • 预选赛:@Default
      • 范围:@Dependent
  • 实例化的结果SomeBean位于存档 2 中。
    • 这个豆子有:
      • 种类:合成
      • 类:juArrayList
      • 预选赛:@CustomQualifier
      • 范围:@ApplicationScoped

原因

基于此,我假设由于某种原因,SomeBean我的自定义扩展正在添加到存档 2,因此无法从存档 1 所在DifferentBean的位置访问。

如果该评估是正确的,我该如何解决?

4

1 回答 1

0

我追踪了这个问题。我期待 Weld 将 ArrayList.class 的泛型解析为 ArrayList。这没有发生,删除通用后我的问题得到解决。

于 2020-10-22T11:24:39.543 回答