java - 如何使用 CDI 从外部库注入(inject) bean?

标签 java dependency-injection jakarta-ee cdi jsr299

如何使用 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/

相关文章:

android - roboGuice 和 butterknife 依赖注入(inject)的区别

dependency-injection - Jersey 2 每个请求 @Context 注入(inject)

java - 查询 .list 和 .getResultList 之间的区别

java - 与 MVC Servlet/JSP 应用程序相比,Java EE 应用程序如何扩展?

java - 使用 Java 增加/减少 AudioInputStream 的音频播放速度

java - Apache Camel : URI Escaping in HTTP (and other Producers)

generics - Angular2//为什么DependencyInjection with Generics只能在Components中起作用?

java - StatelessSessionBean 的 dontRollbackOn

java - 如何在 jgroups 中多播大文件

java - XML-RPC 异常从execute 切换到executeAsync