java - 为什么 CDI 注入(inject)在某些模块中无法工作,而在其他模块中却不能?

标签 java jakarta-ee dependency-injection cdi jboss-weld

在我的 Java EE 项目中,有几个“Java EE”模块和一个 Web 模块。 Java EE 模块之一为 CDI 提供了一个类,供其他模块使用:

@ApplicationScoped
public class XFactory {

  @Produces @Actual
  public X create() {
     return new X();
  }
}

它们被注入(inject)

   @SessionScoped
   public class Target implements Serializable {
       X x;

      @Inject
      public void setX(@Actual X x){
        this.x = x;
      }
   }

但是,这仅适用于 Java EE 模块之一和 Web 模块。在所有剩余的 Java EE 模块中,注入(inject)始终失败,我对原因一无所知:我得到的只是WELD-1408,未满足的依赖性

所有模块在适当的位置都有 beans.xml,只要我不切换到注入(inject),它们都可以工作。大多数目标 bean 已经在 J​​SF 中用作注入(inject) bean。 Java EE 模块的特别之处在于,bean 被注入(inject)到 web 模块中的 servlet,而不是 JSF。

该项目在 GlassFish 3.1 中使用 Java EE 6、EJB 3.1 运行。依赖关系由 Maven 3 管理。X 本身是 Serializable,以满足钝化范围。

你以前遇到过这个吗?我可能做错了什么?

更新:在上面添加了依赖管理备注。

更新:更正了 @ActualTarget 中的位置。

更新:经过一天的实验,更新了包含更多详细信息的描述。

最佳答案

这似乎是 Glassfish 3.1 中的一个问题,在它包含的库​​之一中,或者可能在 JDK 6 中。

我刚刚将我的系统更新到 Glassfish 3.1.1 和 JDK 7,问题不再出现。

关于java - 为什么 CDI 注入(inject)在某些模块中无法工作,而在其他模块中却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6859286/

相关文章:

dependency-injection - Angular2 - 在组件外部使用依赖注入(inject)

java - maven-shade-plugin 不包括声明为依赖项的 jar

用于 if 条件的 Java Lambda 表达式 - 此处不适用

Java Mail API,有什么方法可以确定邮件是否已送达?

java - 使用jeeunit时如何在每次测试后重置数据库?

dependency-injection - Dagger:注入(inject)@Named 字符串?

php - 在自定义用户模块中扩展 ZfcUser 的 UserController

java - Java 中 int 转换为 enum

java - Hibernate 使用悲观锁还是乐观锁?

jakarta-ee - 如何将 Kubernetes 服务注入(inject)我的 java 类?