[英]How to get guice to provide a unique instance with a provider?
我有一个对象A,它执行一些重要的加载。 我为此使用提供商。 我有需要B进行初始化的对象B。 但是,在一个对象CI中,要传递A和B,并对其进行适当的准备。
是否有可能让提供者始终返回相同的实例,或者通过guice模块来保持提供该实例并就此停止?
编辑:
我在guice网站上有以下解释,但很少解释:
@Provides @Singleton
TransactionLog provideTransactionLog() {
...
}
是解决方案。 单例适用于提供者还是提供者。 如果适用于提供者,那么解决方案将是保留一个实例,并在每次返回。 但这不适用于Provide方法。 有什么帮助吗?
Guice的核心非常统一。 在内部,它完全基于提供程序。 链接绑定,实例绑定,提供者绑定,即时绑定, @Provides
绑定-实际上, @Provides
绑定都将始终在@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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.