如何使用CDI从外部库中注入bean?

时间:2010-06-03 14:33:59

标签: java dependency-injection java-ee cdi jsr299

如何使用JSR-299 CDI从外部库中注入(未注释)bean?

示例:

接口X及其实现来自第三方lib。我如何决定使用哪种实现?

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

}

1 个答案:

答案 0 :(得分:8)

使用生产者:

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 {}

如果您不需要区分两个实现,请跳过限定符部分。