Java 如何使用CDI从外部LIB注入bean?
如何使用JSR-299 CDI从外部库注入(非注释)bean 示例: 接口X及其实现来自第三方库。如何决定使用哪个实现Java 如何使用CDI从外部LIB注入bean?,java,dependency-injection,jakarta-ee,cdi,jsr299,Java,Dependency Injection,Jakarta Ee,Cdi,Jsr299,如何使用JSR-299 CDI从外部库注入(非注释)bean 示例: 接口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
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 {}
如果不需要区分两种实现,请跳过限定符部分。我提交了它。它的质量不太好,但主要功能运行良好:)我制作了一个示例jsf2应用程序来演示其中的一些功能。所有其他的都进行了单元测试。现在我计划在BG JUG面前做一个关于CDI的演示。我们将看到:)(在这里,但它不是“生产兴趣”:)使用带有字符串参数的注释(httpParm(“foo”))在Weld文档中有描述(但没有直接映射到JSR-330):是的,用例中有一些奇怪的事情。但是它与这个答案/问题有什么关系呢?取决于OP是否希望根据客户限定符决定使用哪个实现。