8

是否有推荐的模式来关闭/关闭使用 Guice 创建的对象?

我的目标生命周期是:

  1. 准备一个 Guice 模块
  2. 创建注入器
  3. 通过您的代码使用注入器来获取对象 ( injector.getInstance(Foo.class))
  4. ...
  5. 关闭所述对象持有的任何资源(文件句柄、TCP 连接等)。我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
4

1 回答 1

2

我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。

抱歉,Java 对您来说是错误的语言。DI 框架不知道对象的所有引用何时都消失了。只有 GC 知道这一点。

如果您有“可关闭”资源,则使用 try/finally 模式将其关闭(见下文)。

Closable c = // ...
try {
   c.use();
} finally {
   c.close();
}

现在要倒卖一点。Guice 可以知道作用域的开始和结束时间。您的自定义范围可以在完成后运行清理步骤。此范围甚至可以返回代理,因此如果您尝试在允许范围之外访问它们,这些对象将无效。

(哦,对 ColinD +1 - 注入提供者。:)

编辑Guiceyfruit接缝为生命周期提供一些支持

于 2009-11-05T10:25:49.323 回答