【发布时间】:2009-11-04 14:49:04
【问题描述】:
是否有关闭/关闭使用 Guice 创建的对象的推荐模式?
我的目标生命周期是:
- 准备一个 Guice 模块
- 创建注入器
- 通过代码使用注入器获取对象 (
injector.getInstance(Foo.class)) - ...
- 关闭上述对象持有的所有资源(文件句柄、TCP 连接等...)。我希望这是一个确定性步骤(而不是“GC 运行的某一天”)。
【问题讨论】:
-
您可能想在您的问题中添加一些示例代码,因为我不太明白您的意思。
-
“通过您的代码使用注入器来获取对象 (injector.getInstance(Foo.class))” - 这显然 不是 Guice 或任何 DI 的意图要使用的。那只是一个服务定位器。它应该正在构建您的对象图,并且注入器应该只在某些根引导程序类中创建和引用。
-
是的,这就是我评论而不是回复的原因。我认为您可能想要使用 injector.getInstance(Foo.class) 的任何地方都应该能够注入 Provider
并使用它来代替。 -
但是该类清楚地声明了它所依赖的内容,而当您看到一个引用了注入器的类时,您不知道它可能会从那里得到什么。是的,这对于单元测试有很大的不同......不必配置注入器,只需制作一个假提供者,它可以返回您想要的实例。您不再依赖于提供依赖项的机制......只依赖于依赖项本身。
-
这些cmets是在浪费时间!好问题!
标签: java dependency-injection guice object-lifetime