gpt4 book ai didi

java - Guice 提供者方法是否遵守范围?

转载 作者:行者123 更新时间:2023-11-30 06:26:09 26 4
gpt4 key购买 nike

如果我有这样的模块:

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

每次 Guice 使用 providesAppleprovidesBosse 分别注入(inject) AnAppleOfGoldBosse 对象时,他们是否得到Fizz 的同一个单例实例?换句话说,Guice 是在 between 范围内提供方法,还是仅在模块“外部”(DI客户端代码)?提前致谢。

最佳答案

Guice 将尊重 @Provides 之间的单例范围方法,前提是调用它们的是 Guice

在您的示例中,您调用 providesFizz()手动,就像任何其他方法调用一样工作。每次您尝试获取新的 AnAppleOfGold 时,Guice 都会注入(inject)一个新实例或 Bosse .同时,当您请求 Fizz 时,它将创建一个单独的新实例。通过 Guice,并为每个 Fizz 返回相同的实例通过 Guice 注入(inject)。

那么你如何从其他@Provides访问公共(public)实例呢?方法?简单:Guice 将 inject all parameters on your @Provides method , 包括 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());
}

关于java - Guice 提供者方法是否遵守范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com