gpt4 book ai didi

java - CDI。使用@Specializes

转载 作者:行者123 更新时间:2023-12-01 11:16:59 25 4
gpt4 key购买 nike

我对使用 @Specialization 有疑问。按照 Java EE 6 或 7 教程的规定,如果我通过给它 @Specializes 注释来声明我的 bean,它将完全替换 bean,从而扩展我的 bean。例如

    public interface I {}
@Default @Q
public class A implements I {}
@Specializes
public class SpecA extends A {}
////
a) @Inject I a;
b) @Inject @Q I b;

将 SpecA 注入(inject)字段“a”和“b”是否足够?我尝试在 glassfish 4.0 上运行这个示例,但没有成功。

我在教程中读到了奇怪的句子:'通常,标有 @Specializes 注释的 bean 也是一种替代方案,并在 beans.xml 文件中声明为替代方案。 '我不明白我应该做什么才能使其按照教程中的规定工作?我是否需要添加注释@Alternative并将此类添加到beans.xml?或者我需要将我的 bean 添加到 beans.xml 中吗?

最佳答案

回答您的问题

Do I need add annotation @Alternative and add this class to beans.xml?

是的

Do I need add my bean to beans.xml?

没有。以上就可以了

为您提供更多背景信息:

@Specializes 或多或少意味着专门化 @Alternative bean。

@Specializes@Alternative bean 用来替换

时会派上用场
  • 用一个或多个限定符注释的 bean/实现和
  • 注入(inject)点使用一个/多个限定符。

情况 1:您有一个没有限定符的 bean/实现(让我们调用 BeanA)。在这种情况下,您不需要 @Specializes,您必须

  1. 创建一个您想要使用的 @Alternative bean(我们称之为 AltBean)作为 BeanA 的替代品
  2. 在 beans.xml 中列出 AltBean 作为替代方案

情况 2:您有一个 bean/实现(在您的情况 A 中)带有一个或多个限定符。在这种情况下,您必须

  1. 创建一个@Alternative @Specializes bean (SpecA)您想用作 A 的替代品
  2. 使 SpecA 扩展 A
  3. 在 beans.xml 中列出 SpecA 作为替代方案

您的情况是案例 2。

关于java - CDI。使用@Specializes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31704523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com