7

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

}
4

1 回答 1

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

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

于 2010-06-03T14:44:05.877 回答