Java CDI。使用@Specializes
我有一个关于使用@Specialization的问题。按照JavaEE6或7教程的规定,如果我通过给@Specializes注释来声明我的bean,它将完全替换bean,从而扩展我的bean。例如Java CDI。使用@Specializes,java,cdi,Java,Cdi,我有一个关于使用@Specialization的问题。按照JavaEE6或7教程的规定,如果我通过给@Specializes注释来声明我的bean,它将完全替换bean,从而扩展我的bean。例如 public interface I {} @Default @Q public class A implements I {} @Specializes public class SpecA extends A {} //// a) @Inje
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将被注入到字段“a”和“b”中是否足够?
我尝试在glassfish 4.0上运行这个示例,但没有成功
我在教程中读过一些奇怪的句子:
'通常,标记有@Specializes注释的bean也是一个备选方案,并在beans.xml文件中声明为备选方案。'
我不明白我该怎么做才能让它像教程中规定的那样工作?我需要添加annotation@Alternative并将该类添加到beans.xml吗?或者我需要将我的bean添加到beans.xml吗?来回答您的问题 我需要添加注释
@Alternative
并将该类添加到beans.xml吗
对
我需要将bean添加到beans.xml吗
不,上面的就行了
给你更多的背景:
@specialized
或多或少意味着专门化一个@可选的bean
当@替代
bean要替换时,@专用
很方便
- 用一个或多个限定符注释的bean/实现
及
- 注入点使用一个或多个限定符
案例1:您有一个没有限定符的bean/实现(让我们调用BeanA
)。在这种情况下,您不需要@
,您必须
创建一个您想要使用的@备选
bean(我们称之为AltBean)
作为BeanA的替代品
在beans.xml中列出AltBean
,作为备选方案
案例2:您有一个bean/实现(在您的案例A中)和一个或多个限定符。在这种情况下,你必须
创建一个@备选方案和bean(SpecA
)
您希望用作替换的
使SpecA
extendA
在beans.xml中列出SpecA
,作为备选方案
你的是案例2