首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Guice @Singleton必须遵循Singleton设计模式吗?

Guice @Singleton必须遵循Singleton设计模式吗?
EN

Stack Overflow用户
提问于 2015-07-17 07:49:52
回答 2查看 1.2K关注 0票数 2

@Singleton注释的类是否必须遵循单例设计模式

我的猜测是,它们不需要:没有必要有一个私有构造函数和一个static .instance()方法,而是由Guice确保类的一个实例将被实例化。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 13:28:28

它们不仅不需要遵循单例模式,而且显式地不应该遵循它()。

使用Guice正确设置的系统应该创建尽可能少的自己的对象,而不是让框架完成所有的对象创建。此外,您做的是而不是,您希望系统中的随机类在这个静态实例上调用.instance(),最后,您不希望Guice使用.requestStaticInjection()在Singleton类中创建静态引用。

对于您的@Singleton类,正确的做法是将它们注入需要特定依赖项的类中。

票数 8
EN

Stack Overflow用户

发布于 2015-07-17 13:50:46

Guice中的单例与常规的单例之间的区别与上下文有关。

当你不使用Guice的时候,你必须自己管理你的独生子女。为了确保只创建了一个实例,您有一个私有构造函数、一个静态字段和访问该实例的方法(或者是一个getter,或者是将字段变为最终的)。这意味着实例是类加载器上下文中的单个实例。如果您创建另一个类加载器并告诉它加载您的单例类,则可以创建第二个实例。

当单例由Guice管理时,我们用@Singleton注释替换私有构造函数和静态字段,告诉注入器它只应该创建该类的一个实例,并在请求的任何地方使用它。因为可以同时使用多个注入器(因为需要两个完全不同的上下文,或者因为使用子注入器),所以不能阻止Guice实例化类的多个实例。

此外,由于您应该依赖Guice在任何地方提供单例(它是必需的),所以不需要包含单例实例的静态字段,因为它永远不会被访问。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31470844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档