如何从外部Libs注入CDI?
-
24-10-2019 - |
题
如何使用JSR-299 CDI从外部库中注入(不注释)豆?
例子:
接口X及其实现来自第三方自由。我如何决定要使用哪种实施?
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
}
解决方案
使用生产商:
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 {}
如果您不需要区分两个实现,请跳过预选赛部分。
不隶属于 StackOverflow