java - 注入(inject)器的 Guice 和 'injection'

标签 java singleton instance guice cdi

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

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

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

因此,我必须在代码中的任何位置传递注入(inject)器实例,或者使其在单例中可用。

这正是我想避免的。

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

谢谢。

最佳答案

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

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

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

关于java - 注入(inject)器的 Guice 和 'injection',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610957/

相关文章:

java - 2 关于单例模式/渴望初始化和同步

c++ - C++中的模板模板参数。使用实例

java - JUNG 的 DirectedSparseGraph 是可序列化的吗?

java - 将其他类的方法返回的 JPanel 以一种又一种的方式分配给公共(public) JPanel 对象时出现问题

java - Dao 服务作为单例?

php - MySQL 单例类与递归函数冲突(PHP)

node.js - 如何使用 express 保留数据库的一个实例

java - 如何在 Forge 中获取 MinecraftServer 的实例?

java - 在子类中使用 super 或 this 访问父类(super class)中的属性?

java - 如何获取刚刚放入Amazon S3存储桶中的对象的URL?