如何获得提供商提供独特的实例?

Maa*_*mon 1 java guice

我有一个对象A做了一些重要的加载.我使用它的提供者.我有对象B需要A进行初始化.但是在一个对象CI中想要传递A和B,做好充分准备.

是否有可能让提供者一直返回相同的实例,或者guice模块是否保持提供该实例并在那里停止?

编辑:

我在guice网站上有以下几点解释:

@Provides @Singleton
TransactionLog provideTransactionLog() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

这是解决方案吗?单身人士是否适用于提供者或提供者.如果它适用于提供者那么,解决方案是保留一个实例并每次返回它.但这不适用于提供方法.有帮助吗?

Vla*_*eev 5

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

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

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();
    }
}
Run Code Online (Sandbox Code Playgroud)