我有一些没有实现任何接口的处理器类:
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
好的。我创建了一个新的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
我做错了吗? 谢谢。
答案 0 :(得分:0)
这似乎是我在this question中回答的问题的一种扭曲。
简而言之,当您注入EJB bean时,您需要基于它们的客户端可见部分-接口来注入它们。当然,除非您像原始方案一样具有无接口视图。 CDI spec涵盖了这一点,如果您想阅读。
您将不得不通过Processor2
注入ProcessorInterfase
。但是有三种实现,因此会导致模棱两可的依赖关系,因此您还需要限定符。最终的解决方案如下所示:
@Inject
@Process2Bean
ProcessorInterfase processor2;