Guice 允许自定义一个实例的作用范围(一个实例作用于整个应用期间,一段会话期间,还是一次请求期间)。

内置的作用范围

  • 单例(兼容 javax.inejct.Singletoncom.google.inject.Singleton
  • 请求,需要用到 servlet 扩展模块中的 @RequestScoped

指定实例的作用范围

存在三种方式指定实例的作用范围

  1. 在需要依赖注入的实例的类型声明上使用注解,例如 @Singleton
  2. 通过 Module 类型中的 DSL,例如 bind(TransactionLong.class).to(InMemoryTransactionLog.class).in(Singleton.class) (最后的 in 方法指定了实例的作用范围)
  3. Module 类型注解了 @Provides 的方法上使用注解,例如 @Singleton

需要注意的一点是,Guice 中的作用范围是和 Guice Key 绑定的,而不是作为 value 的实例。如果需要指定一个实例的作用范围,需要使用使用 bind(MyClass.class).in(Singleton.class) 或者在实例的具体类型声明上通过注解指定作用范围。

NO_SCOPE

Scopes.NO_SCOPE 可以作为测试时进行模拟时一个实例的作用范围以方便测试。


下篇:

Guice Review 绑定
Coding, rescue my life.