是否有推荐的模式来关闭/关闭使用 Guice 创建的对象?
我的目标生命周期是:
- 准备一个 Guice 模块
- 创建注入器
- 通过您的代码使用注入器来获取对象 (
injector.getInstance(Foo.class)
) - ...
- 关闭所述对象持有的任何资源(文件句柄、TCP 连接等)。我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
是否有推荐的模式来关闭/关闭使用 Guice 创建的对象?
我的目标生命周期是:
injector.getInstance(Foo.class)
)我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
抱歉,Java 对您来说是错误的语言。DI 框架不知道对象的所有引用何时都消失了。只有 GC 知道这一点。
如果您有“可关闭”资源,则使用 try/finally 模式将其关闭(见下文)。
Closable c = // ...
try {
c.use();
} finally {
c.close();
}
现在要倒卖一点。Guice 可以知道作用域的开始和结束时间。您的自定义范围可以在完成后运行清理步骤。此范围甚至可以返回代理,因此如果您尝试在允许范围之外访问它们,这些对象将无效。
(哦,对 ColinD +1 - 注入提供者。:)
编辑:Guiceyfruit接缝为生命周期提供一些支持