如何使用 JSR-299 CDI 从外部库注入(inject)(未注释)bean?
例子:
接口(interface) X 及其实现来自第三方库。我如何决定使用哪个实现?
class A {
@Inject
private X x;
}
如果我有几个使用 X 接口(interface)但实现不同的类怎么办?
class A {
@Inject
private X x; // should be XDefaultImpl
}
class B {
@Inject
private X x; // should be XSpecialImpl
}
最佳答案
使用生产者:
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 {}
如果您不需要区分两个实现,请跳过限定符部分。
关于java - 如何使用 CDI 从外部库注入(inject) bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2966898/