我已经阅读了几篇关于Guice(3.0)的文章和教程,现在有一些挥之不去的问题,然后我才能“把它们捆绑在一起”。
// 1. Binds via public, no-arg "ServiceImpl()" ctor?
bind(Service.class).to(ServiceImpl.class);
// 2. Every client-side request for a Service instance returns the same
// ServiceImpl instance?
ServiceImpl impl = new ServiceImpl(...);
bind(Service.class).toInstance(impl);
// 3. Every client-side request for a Service instance returns the same
// SINGLETON ServiceImpl instance?
ServiceImpl impl = new ServiceImpl(...);
bind(Service.class).in(Scopes.SINGLETON).toInstance(impl);
// 4. Should this be a call too bindConstant() instead of toInstance()
// instead? If so, how/why?
Integer timeout = 1000 * 60; // 60 seconds
bind(Integer.class).named(Names.named("TIMEOUT")).toInstance(timeout);
所以我的问题,正如上面的代码片段所暗示的那样:
to(...)
时,我假设使用了公共no-arg ctor,并且每次都返回一个新实例?impl
次请求的Service.class
个实例,还是新的请求?Scopes.SINGLETON
。bindConstant()
?如果是这样,怎么/为什么?提前致谢!
答案 0 :(得分:1)
bind(ServiceImpl.class).in(...)
后面的@Singleton
行或ServiceImpl
注释。impl
时都使用相同的Service
实例toInstance
绑定上指定范围。bindConstant()
应该用于诸如原始或字符串类型的配置参数之类的东西。有关详细信息,请参阅this answer。@Provides
方法只是编写Provider<>
的简短方法。如果您不需要它们,请不要使用它们。如果创建对象比简单的构造函数调用更复杂,通常应该使用它们。