添加接口实现后,对容器管理的无状态Bean的不满意依赖性

时间:2018-08-03 14:42:21

标签: java-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;
    @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

我做错了吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

这似乎是我在this question中回答的问题的一种扭曲。

简而言之,当您注入EJB bean时,您需要基于它们的客户端可见部分-接口来注入它们。当然,除非您像原始方案一样具有无接口视图。 CDI spec涵盖了这一点,如果您想阅读。

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

@Inject
@Process2Bean
ProcessorInterfase processor2;