0

カスタム注釈を定義せずに、注入ポイントに基づいて計算されたコンストラクター/ファクトリー引数でカスタム注入を実行することは可能ですか?

与えられたコード:

class Foo {
  public Foo() {}
  public Foo(java.lang.reflect.Field field) {}
}

class Bar {
  @javax.inject.Inject Foo foo;
}

変更せずにFoo(ターゲット フィールドを渡す)の 2 番目のコンストラクターを使用するように Guice を構成するにはどうすればよいですかBar

Guice が標準の @Inject を使用して java.util.logging.Logger のカスタム インジェクションを実行できることはわかっていますが、それはハードコードされているようで、内部 API を使用しています。

4

2 に答える 2

1

インジェクションプロバイダーを使用してそれを行うことができます。https://code.google.com/p/google-guice/wiki/ProviderBindingsおよびhttps://code.google.com/p/google-guice/wiki/ProvidesMethodsを参照してください。オブジェクトをバインドするときにオブジェクトをインスタンス化する方法を Guice に指示するだけです。

私のプロジェクトの例として、私はこれを試しました:

public static class CalendarServiceProvider implements Provider<CalendarService> {
    @Inject
    GAppsOAuth oauth;
    private GCalendarService service;

    @Override
    public CalendarService get() {
        if (service == null) {
            service = new GCalendarService(oauth);
        }
        return service;
    }
}

お探しのものかどうかわかりませんが、参考になれば幸いです。

于 2013-08-06T09:16:10.307 に答える