質問

JSR-299 CDIを使用して外部ライブラリから豆を注入するにはどうすればよいですか?

例:

インターフェイス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

}
役に立ちましたか?

解決

プロデューサーの使用:

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

2つの実装を区別する必要がない場合は、予選部品をスキップします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top