我对使用@Specialization有疑问。正如Java EE 6或7教程所规定的那样,如果我通过给它@Specializes注释来声明我的bean,那就是它。 ll完全替换bean,它扩展了我的bean。 E.g。
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文件中声明为替代方法。 ' 我不明白我该怎么做让它按照教程中的规定工作?我是否需要添加注释@Alternative并将此类添加到beans.xml?或者我需要将我的bean添加到beans.xml吗?
答案 0 :(得分:3)
回答你的问题
我是否需要添加注释
@Alternative
并将此类添加到beans.xml?
是
我是否需要将bean添加到beans.xml?
没有。上面会做
为您提供更多背景信息:
@Specializes
或多或少意味着专门化@Alternative
bean。
@Specializes
bean要替换时, @Alternative
会派上用场
案例1:您有一个没有限定符的bean /实现(让我们调用BeanA
)。在这种情况下,您不需要@Specializes
,您必须
@Alternative
bean(让我们调用AltBean)
作为BeanA的替代AltBean
作为替代案例2:您有一个bean /实现(在您的情况下为A),带有一个或多个限定符。在这种情况下,您必须
@Alternative
和 @Specializes
bean(SpecA
)
您想用它作为A SpecA
延长A
SpecA
作为替代你的是案例2。