gpt4 book ai didi

java - 如何获得指导以提供提供者的唯一实例?

转载 作者:行者123 更新时间:2023-11-29 07:46:13 25 4
gpt4 key购买 nike

我有一个执行一些重要加载的对象 A。我为此使用了提供商。我有对象 B 需要 A 进行初始化。但是,在对象 C 中,我想传递 A 和 B,并做好适当准备。

是否有可能让提供者始终返回相同的实例,或者让 guice 模块保持提供该实例并就此停止?

编辑:

我在 guice 网站上有以下内容,解释不多:

@Provides @Singleton
TransactionLog provideTransactionLog() {
...
}

这就是解决方案吗?单例适用于提供者还是提供者。如果它适用于提供者,则解决方案是保留一个实例并每次都返回它。但这不适用于 provide 方法。有什么帮助吗?

最佳答案

Guice 的核心非常统一。在内部,它完全基于提供者。链接绑定(bind)、实例绑定(bind)、提供程序绑定(bind)、即时绑定(bind)、@Provides-绑定(bind)——实际上,每一种绑定(bind)——总是会在幕后生成一个提供程序。因此范围注释不能应用于提供者,它只是没有意义。作用域总是分配给实际注入(inject)的对象,因此您可以确定,如果您将一些绑定(bind)放入@Singleton 作用域,实际注入(inject)的对象将总是 相同,无论此绑定(bind)的类型如何。

因此,这些绑定(bind)中的每一个都会始终为您提供完全相同的唯一对象(当然,您不能将所有这些绑定(bind)都放入您的模块中;选择您最喜欢的一个):

bind(SomeDependency.class).to(SomeDependencyImpl.class).in(Singleton.class);

bind(SomeDependency.class).toInstance(new SomeDependencyImpl());

bind(SomeDependency.class).toProvider(() -> new SomeDependencyImpl()).in(Singleton.class);

public class SomeModule extends AbstractModule {
@Provides @Singleton
SomeDependency someDependencyImpl() {
return new SomeDependencyImpl();
}
}

关于java - 如何获得指导以提供提供者的唯一实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472785/

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