我已经阅读了几篇关于 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(...)
,我假设使用了 public no-arg ctor,并且每次都返回一个新实例? - 根据上面的#2,是同一个
impl
实例用于Service.class
请求,还是返回一个新实例? - 与上面的#3 相同,但现在
Scopes.SINGLETON
指定了。 - 上面的代码可以还是我应该使用
bindConstant()
?如果是这样,如何/为什么? - 在什么情况下我应该使用所谓的提供者方法?我有点理解该页面上的示例,但现在在我的代码中为它们找到真实世界的用例时感到窒息。
提前致谢!