Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用CDI从外部LIB注入bean?_Java_Dependency Injection_Jakarta Ee_Cdi_Jsr299 - Fatal编程技术网

Java 如何使用CDI从外部LIB注入bean?

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

如何使用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 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是否希望根据客户限定符决定使用哪个实现。