rip*_*234 8 java dependency-injection guice object-lifetime
是否有建议的模式来关闭/关闭使用Guice创建的对象?
我的目标是:
injector.getInstance(Foo.class))我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
抱歉,Java 语言不适合您。DI 框架不知道某个对象的所有引用何时消失。只有 GC 知道这一点。
如果您有“可关闭”资源,则使用 try/finally 模式来关闭它(见下文)。
Closable c = // ...
try {
c.use();
} finally {
c.close();
}
Run Code Online (Sandbox Code Playgroud)
现在回过头来兜售一下。Guice 可以知道范围何时开始和结束。您的自定义范围可以在完成时运行清理步骤。此作用域甚至可以返回代理,因此如果您尝试在允许的作用域之外访问它们,则对象将无效。
(哦,还有给 ColinD +1 - 注入提供商。:)
编辑:Guiceyfruit似乎对生命周期有一些支持