如何使用JSR-299 CDI从外部库中注入(未注释)bean?
示例:
接口X及其实现来自第三方lib。我如何决定使用哪种实现?
class A {
@Inject
private X x;
}
如果我使用X接口但有不同的实现有几个类怎么办?
class A {
@Inject
private X x; // should be XDefaultImpl
}
class B {
@Inject
private X x; // should be XSpecialImpl
}
答案 0 :(得分:8)
使用生产者:
public class ClassInABeanArchive {
@Produces @SpecialX public X createSpecialX() {
return new XSpecialImpl();
}
@Produces @DefaultX public X createDefaultX() {
return new XDefaultImpl();
}
}
您必须定义@SpecialX
和@DefaultX
限定词。并将它们与@Inject
一起使用:
@Qualifier
@Retention(..)
@Target(..)
public @interface SpecialX {}
如果您不需要区分两个实现,请跳过限定符部分。