使用 Google Guice 进行生命周期管理
是否有推荐的模式来关闭/关闭使用 Guice 创建的对象?
我的目标生命周期是:
- 准备一个 Guice 模块
- 创建一个注入器
- 通过代码使用注入器来获取对象 (
injector.getInstance(Foo.class)
) - ...
- 关闭由表示对象(文件句柄、TCP 连接等)。我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
Is there a recommended pattern for shutting down / closing objects created with Guice?
The lifecycle I'm aiming for is:
- Prepare a Guice Module
- Create an injector
- Use the injector through your code to obtain objects (
injector.getInstance(Foo.class)
) - ...
- Close any resources held by said objects (file handles, TCP connections, etc...). I want this to be a deterministic step (not "some day when the GC runs").
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
抱歉,Java 语言不适合您。 DI 框架不知道某个对象的所有引用何时消失。只有 GC 知道这一点。
如果您有“可关闭”资源,则使用 try/finally 模式来关闭它(见下文)。
现在回过头来兜售一下。 Guice 可以知道范围何时开始和结束。您的自定义范围可以在完成时运行清理步骤。此作用域甚至可以返回代理,因此如果您尝试在允许的作用域之外访问它们,则对象将无效。
(哦,对 ColinD +1 - 注入提供商。:)
编辑:Guiceyfruit 似乎对生命周期有一些支持
Sorry but then Java is the wrong language for you. The DI framework does not know when all the references to an object are gone. Only the GC knows this.
If you have a "closable" resource then use the try/finally pattern to close it (see below).
Now to back peddle a little. Guice can know when a scope starts and ends. Your custom scope could run a clean up step when it finishes. This scope could even return proxies so the objects would be invalid if you attempted to access them out side of the allowed scope.
(Oh and +1 to ColinD - Inject providers. :)
EDIT: Guiceyfruit seams to have some support for Lifecycles