我有一个对象A做了一些重要的加载.我使用它的提供者.我有对象B需要A进行初始化.但是在一个对象CI中想要传递A和B,做好充分准备.
是否有可能让提供者一直返回相同的实例,或者guice模块是否保持提供该实例并在那里停止?
编辑:
我在guice网站上有以下几点解释:
@Provides @Singleton
TransactionLog provideTransactionLog() {
...
}
Run Code Online (Sandbox Code Playgroud)
这是解决方案吗?单身人士是否适用于提供者或提供者.如果它适用于提供者那么,解决方案是保留一个实例并每次返回它.但这不适用于提供方法.有帮助吗?
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)
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |