使用 Google Guice 进行生命周期管理

发布于 2024-08-09 21:25:26 字数 253 浏览 9 评论 0原文

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

我的目标生命周期是:

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

Is there a recommended pattern for shutting down / closing objects created with Guice?

The lifecycle I'm aiming for is:

  1. Prepare a Guice Module
  2. Create an injector
  3. Use the injector through your code to obtain objects (injector.getInstance(Foo.class))
  4. ...
  5. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把梦留给海 2024-08-16 21:25:26

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

抱歉,Java 语言不适合您。 DI 框架不知道某个对象的所有引用何时消失。只有 GC 知道这一点。

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

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

现在回过头来兜售一下。 Guice 可以知道范围何时开始和结束。您的自定义范围可以在完成时运行清理步骤。此作用域甚至可以返回代理,因此如果您尝试在允许的作用域之外访问它们,则对象将无效。

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

编辑Guiceyfruit 似乎对生命周期有一些支持

I want this to be a deterministic step (not "some day when the GC runs").

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).

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文