【问题标题】:Guice and 'injection' of the Injector注射器的Guice和“注射”
【发布时间】:2012-07-21 14:18:09
【问题描述】:

阅读这篇文章后我尝试了 Google Guice:http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/

但有一点我不明白:当您使用 Guice 的 @Singleton 注解时,注入会注入同一个实例,但只针对一个 Injector。

如果我在其他地方创建另一个注入器,@Singletion 不起作用(如文档中所述)。

所以我将不得不在我的代码中的任何地方传递注入器实例,或者使其在单例中可用。

这正是我想避免的。

我们如何管理 injectorS 以使其每次都返回相同的实例?

谢谢。

【问题讨论】:

  • > 如果我在其他地方创建另一个 Injector 你为什么要创建其他注入器?
  • @mlk 因为我按照本教程尝试了 Guice:code.google.com/p/google-guice/wiki/GettingStarted,他们通过在注入器上调用 getInstance 来构建对象。但我不认为该注入器必须在我的应用程序的任何地方传递。
  • 你应该尝试拥有的是一棵对象树,并且主要是你有一个引导类来让世界运转。

标签: java singleton instance guice cdi


【解决方案1】:

使用 Guice 的代码通常不需要访问注入器本身:如果对象需要构造多个依赖项,它们将接收它们的依赖项或 Provider<T> 用于它们的依赖项。

通常,对象仅在具有依赖项但自身不是由注入器创建的情况下才需要注入器(因此它们不能注入其依赖项)。如果您在任何地方都使用 Guice,您可能只需要在应用程序启动时执行此操作。如果您只在项目的一部分中使用 Guice,则注入器将成为一个单例,代理您现在通过它访问的所有其他单例。

请注意,注释 @Singleton 的类仍然是单例对象,尽管没有与非注入单例相关的一些包袱。你还是应该尽量避免过度依赖它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多