簡體   English   中英

Guice提供者方法遵守范圍嗎?

[英]Do Guice provider methods honor scope?

如果我有這樣的模塊:

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());
    }
}

每次吉斯使用providesAppleprovidesBosse注入AnAppleOfGoldBosse分別為對象,他們究竟是怎么菲斯同單實例? 換句話說,Guice是否尊重提供方法之間的范圍,還是僅從模塊“外部”(DI客戶端代碼)尊重范圍(在這種情況下為Scopes.SINGLETON )? 提前致謝。

Guice將尊重@Provides方法之間的Singleton范圍, @Provides 是Guice是調用它們的方法

在您的示例中,您手動調用providesFizz() ,其工作方式與任何其他方法調用一樣。 每當您嘗試獲取新的AnAppleOfGoldBosse時,Guice都會注入一個新實例。 同時,當您通過Guice請求Fizz時,它將創建一個單獨的新實例,並為通過Guice注入的每個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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM