开发者

How to inject beans from external libs with CDI?

How can I use JSR-299 CDI to inject (not annotated) beans fro开发者_如何学JAVAm external libraries?

Examples:

Interface X and its implementations come from a third party lib. How can I decide which implementation to use?

class A {

    @Inject 
    private X x;

}

What if I had several classes using the X interface but different implementations?

class A {

    @Inject 
    private X x; // should be XDefaultImpl

}

class B {

    @Inject 
    private X x; // should be XSpecialImpl

}


Use producers:

public class ClassInABeanArchive {
    @Produces @SpecialX public X createSpecialX() {
        return new XSpecialImpl();
    }

    @Produces @DefaultX public X createDefaultX() {
        return new XDefaultImpl();
    }
}

You will have to define the @SpecialX and @DefaultX qualifiers. and use them together with @Inject:

@Qualifier
@Retention(..)
@Target(..)
public @interface SpecialX {}

If you don't need to differentiate two implementations, skip the qualifiers part.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜