注射器的Guice和'注射'

时间:2012-07-23 10:42:56

标签: java singleton instance guice cdi

我在阅读本文后试用了Google Guice:http://tech.puredanger.com/2007/07/03/pattern-hate-singleton/

但有些事情我不明白:当你使用Guice的@Singleton anotation时,注入会注入相同的实例,但仅适用于一个Injector。

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

所以我必须在代码中的任何地方传递注入器实例,或者以单例形式提供它。

这正是我想避免的。

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

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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