java - Guice 绑定(bind) API 示例

标签 java dependency-injection inversion-of-control guice

我已经阅读了几篇关于 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);

所以我的问题,如上面的代码片段所示:

  1. 当使用to(...)时,我假设使用公共(public)无参数构造函数,并且每次都会返回一个新实例?
  2. 根据上述第 2 条,对于所有 Service.class 请求来说,是否使用相同的 impl 实例,还是返回一个新实例?
  3. 与上面的 #3 相同,但现在指定了 Scopes.SINGLETON
  4. 上面的代码可以吗还是我应该使用bindConstant()?如果是这样,如何/为什么?
  5. 在什么情况下我应该使用所谓的provider methods ?我有点理解该页面上的示例,但当谈到在我的代码中找到它们的真实用例时,我现在感到窒息。

最佳答案

  1. 要么使用公共(public)无参构造函数,要么使用@Inject注释的构造函数(推荐)。每次都会返回一个新实例,除非您在 ServiceImpl 上指定范围(通过后面的 bind(ServiceImpl.class).in(...) 行或 @Singleton 上的 ServiceImpl 注释。
  2. 在这种情况下,相同的 impl实例用于 Service 的每次注入(inject)
  3. 这是一个编译错误,有充分的理由——你不能在 toInstance 上指定范围。绑定(bind)。
  4. bindConstant()应该用于诸如原始或字符串类型的配置参数之类的事情。欲了解更多信息,请参阅this answer .
  5. @Provides方法只是一种更短的书写方式 Provider<> s。如果您不需要它们,请不要使用它们。如果创建对象比简单的构造函数调用更复杂,则通常应该使用它们。

关于java - Guice 绑定(bind) API 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18594189/

相关文章:

unit-testing - 这种依赖注入(inject)的设计容易理解吗?

c# - 使用ctor注入(inject)和ServiceProvider创建实例

c# - MEF 是一件全有还是全无的事情吗?

java - 如何向下转换 Java 对象?

java - 无法使用 Selenium WebDriver 找到 Canvas 上的元素

spring - 如何使用spring依赖注入(inject)局部变量?

javascript - 我们如何使用 $inject 将依赖项注入(inject)到 Angular 工厂中?

java - 由方法生成的数组

java - Jackson 如何使用自定义 getter/setter 序列化 map ?

c# - IoC Windows 服务架构