【问题标题】:Unsatisfied dependency for container managed Stateless bean after adding interface implementation添加接口实现后容器管理的无状态 bean 的依赖关系不满足
【发布时间】:2018-08-03 14:42:20
【问题描述】:

我有一些处理器类没有实现任何接口:

public class Processor1 {
}

@Stateles
public class Processor2 {
}

public class Processor3 {
}

其中一个是容器管理的无状态 bean。

服务类已注入所有处理器:

public class MyService {
    @Inject private Processor1 p1;
    @Inject private Processor2 p2;
    @Inject private Processor3 p3;
}

比我的要求是所有处理器都应该实现一个interfase ProcessorInterfase;

更改代码后,部署失败并出现错误:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Default

好的。我创建了一个新的限定符 @Process2Bean 并将其添加到 Processor2 声明中:

@Stateles
@Process2Bean
public class Processor2 {
}

到注入点:

public class MyService {
    @Inject private Processor1 p1;
    @Inject @Process2Bean private Processor2 p2;
    @Inject private Processor3 p3;
}

现在我有以下部署错误:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type Processor2 with qualifiers @Process2Bean
at injection point [UnbackedAnnotatedField] @Inject @Process2Bean private a.b.c.MyService.p2

我做错了吗? 谢谢。

【问题讨论】:

  • 奇怪,预选赛的 imO 应该不是必需的。如果您使用 @EJB 而不是 @Inject 注释处理器 p2 会发生什么?

标签: jakarta-ee ejb cdi


【解决方案1】:

这看起来像是我在this question 中回答的问题的一个转折点。

简而言之,当您注入 EJB bean 时,您需要根据它们的客户端可见部分 - 接口来注入它们。当然,除非您像原始场景那样没有界面视图。如果您想阅读,CDI spec 会涵盖此内容。

您将不得不通过ProcessorInterfase 注入Processor2。但是有三种实现,所以会导致不明确的依赖,因此你还需要限定符。最终解决方案可能如下所示:

@Inject
@Process2Bean
ProcessorInterfase processor2;

【讨论】:

  • 对不起,正在度假。
猜你喜欢
  • 2019-01-02
  • 2015-11-25
  • 1970-01-01
  • 2012-02-20
  • 2023-03-12
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多