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

例子:

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

如果您不需要区分两个实现,请跳过预选赛部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top