Jakarta ee 添加接口实现后容器管理的无状态bean的不满意依赖关系

Jakarta ee 添加接口实现后容器管理的无状态bean的不满意依赖关系,jakarta-ee,ejb,cdi,Jakarta Ee,Ejb,Cdi,我有一些没有实现任何接口的处理器类: public class Processor1 { } @Stateles public class Processor2 { } public class Processor3 { } 其中之一是容器管理的无状态bean 服务类已注入所有处理器: public class MyService { @Inject private Processor1 p1; @Inject private Processor2 p2; @Inj

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

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;
}
然后我要求所有处理器都应该实现一个interbase processor interfase

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

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
我做错什么了吗?
谢谢。

这看起来像是我回答的一个问题的转折点

简而言之,当您注入EJB bean时,您需要基于它们的客户端可见部分-接口注入它们。当然,除非您没有原始场景中的接口视图。如果您想阅读,请阅读本手册

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

@Inject
@Process2Bean
ProcessorInterfase processor2;

奇怪的是,imO不需要限定符。如果您用@EJB而不是@Inject注释处理器p2,会发生什么?对不起,我正在度假。