添加接口实现后容器管理的无状态 bean 的依赖性不满足

Unsatisfied dependency for container managed Stateless bean after adding interface implementation

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

public class Processor1 {
}

@Stateles
public class Processor2 {
}

public class Processor3 {
}

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

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

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

我要求所有处理器都应该实现接口 ProcessorInterfase;

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

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

好的。我创建了一个新的 Qualifier @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

我是不是做错了什么? 谢谢。

这看起来像是我在 中回答的问题的转折。

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

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

@Inject
@Process2Bean
ProcessorInterfase processor2;