2

次のようなモジュールがある場合:

public class MyModule extends AbstractModule {
    @Override
    public void configure() {
        bind(WhatsThis.class).to(AnAppleOfGold.class);
        bind(TellMeYourName.class).to(Bosse.class);
    }

    @Provides
    public AnAppleOfGold providesApple() {
        return new AppleOfGold(providesFizz());
    }

    @Provides
    public Bosse providesBosse() {
        return new Bosse("Grab a hold of my beard", providesFizz());
    }

    @Provides @Singleton
    public Fizz providesFizz() {
        return new Fizz(Math.random());
    }
}

providesAppleGuice がandを使用してオブジェクトをそれぞれprovidesBosse注入するたびに、Fizz の同じシングルトン インスタンスを取得しますか? 言い換えれば、Guice は providesメソッド間のスコープを尊重しますか、それともモジュール (DI クライアント コード) の「外側」からのスコープ (この場合は ) のみを尊重しますか? 前もって感謝します。AnAppleOfGoldBosseScopes.SINGLETON

4

1 に答える 1

5

Guiceは、メソッド間のシングルトンスコープを尊重します。ただし、Guiceが@Providesメソッドを呼び出すものである必要があります

この例では、providesFizz()手動で呼び出します。これは、他のメソッド呼び出しと同じように機能します。AnAppleOfGoldGuiceは、新しいまたはを取得しようとするたびに新しいインスタンスを注入しますBosse。一方、Guiceを介してリクエストすると、個別の新しいインスタンスが作成され、Guiceを介して注入されるFizzたびに同じインスタンスが返されます。Fizz

@Providesでは、他のメソッドから共通インスタンスにどのようにアクセスしますか?シンプル:Guiceは、またはを含む@Providesメソッドにすべてのパラメーターを挿入します。FizzProvider<Fizz>

@Provides
public AnAppleOfGold providesApple(Fizz fizz) {
  return new AppleOfGold(fizz);
}

@Provides
public Bosse providesBosse(Provider<Fizz> fizzProvider) {
  return new Bosse("Grab a hold of my beard", fizzProvider.get());
}

@Provides @Singleton
public Fizz providesFizz() {
  return new Fizz(Math.random());
}
于 2013-02-11T04:41:01.933 に答える