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

2つの実装を区別する必要がない場合は、修飾子の部分をスキップしてください。

于 2010-06-03T14:44:05.877 に答える