【发布时间】:2013-08-17 09:54:30
【问题描述】:
我对@987654323@ 和CDI 没有经验,我目前正在尝试理解它们的一些基本原理以及如何使用它。特别想了解Qualifiers的用途和用途,我已经阅读了guide。但是我无法完全理解 Qualifier 如何充当接口的扩展。以指南中的示例和声明为起点:“限定符就像接口的扩展。它不会创建对任何特定实现的直接依赖。@Asynchronous PaymentProcessor 可能有多种替代实现! ",我假设一个人可以做到:
@Asynchronous
public class AsynchronousPaymentProcessor implements PaymentProcessor {
public void process(Payment payment) { ... }
}
和
@Asynchronous
public class OtherAsynchronousPaymentProcessor implements PaymentProcessor {
public void process(Payment payment) { ... }
}
然后他们尝试注入:
@Inject @Asynchronous PaymentProcessor asyncPaymentProcessor;
在这种情况下如何确定注入哪个 bean,因为两者都使用相同的 Qualifier 注释?还是限定符的多个实现只关注Alternatives?
更新完成:
我也已阅读相关问题。我想要的是一个没有很长描述的答案:既然我可以注入实现接口的类型类,那么注入接口类型有什么好处,除了实现松散耦合?如果我用 2 个@Asynchronous 实现尝试上面的代码并且我收到一个异常,那么我推断它(多个实现)只能通过替代方案来实现。我说的对吗?
【问题讨论】:
-
请看一下这个答案,尤其是标题为“是否需要限定符?”的部分stackoverflow.com/questions/15231255/…
-
另外,您的示例未正确遵循指南,在这种情况下,您将收到 UnambiguousDependecyException。在指南中,他们有两个限定符,
@Synchronous和@Asynchronous。 -
或者对于他们在两个实现中使用
@Asynchronous的示例,他们添加了额外的限定符。
标签: jakarta-ee ejb cdi