0

class-path の jar にクラス A があるとします (つまり、そのソースを制御できないため、単純に で注釈を付けることができません@Inject)。A には、次のコンストラクター定義があります。

A(B b, C c) {
    this.b = b;
    this.c = c;
}

私のコードベースには、クラスがあります:

BImpl implements B

CImpl implements C

私の質問は次のとおりです: BImpl および CImpl で注入される A のインスタンスを管理するように Guice を構成するにはどうすればよいですか (それがフレームワークの範囲内であっても)。

4

1 に答える 1

1

@Inject「jarファイル内のクラスA」と言うとき、そのクラスのソースを制御できないと思います-コンストラクターに単純に追加することはできません。

その場合は、次のModuleように定義できます。

class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(B.class).to(BImpl.class);
        bind(C.class).to(CImpl.class);

        try {
            bind(A.class).toConstructor(A.class.getConstructor(B.class, C.class));
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        }
    }
}

最初の 2 つのバインディングは標準です。インターフェイス タイプを実装タイプにバインドします。

最後のバインディングはtoConstructor(Guice 3.0 以降) を使用します。これにより、外部コンポーネントをより簡単に「接着」することができます - あなたの場合と同様です。

于 2012-07-24T08:35:24.653 に答える