[英]How to test Guice Singleton?
Guice Singletons对我来说很奇怪
首先,我想到了
IService ser = Guice.createInjector().getInstance(IService.class);
System.out.println("ser=" + ser);
ser = Guice.createInjector().getInstance(IService.class);
System.out.println("ser=" + ser);
将作为单身人士工作,但它会返回
ser=Service2@1975b59
ser=Service2@1f934ad
没关系,它并不容易。
Injector injector = Guice.createInjector();
IService ser = injector.getInstance(IService.class);
System.out.println("ser=" + ser);
ser = injector.getInstance(IService.class);
System.out.println("ser=" + ser);
作为单身人士工作
ser=Service2@1975b59
ser=Service2@1975b59
所以我需要有Injector的静态字段(Singleton for Singletons)
我如何传递给它模块进行测试?
使用Guice时,每个JVM应该只创建一个注入器。 通常,您将在应用程序的入口点(即在您的public static void main
方法中)创建它。 如果在应用程序中多次调用createInjector
,则可能使用Guice错误!
单身人士是每个注射器的实例。 请注意,这不是每个JVM实例。 获得单身人士参考的最佳方法是注入它。 另一种方法是要求唯一的注射器实例给你。
你真的需要做更多的测试(和阅读),然后才能做出疯狂的,不准确的指责。 我正在使用Guice来管理我的单例实例。
你的模块绑定是什么样的? GoF中的单例模式只是确保一个类的一个实例的一种方式,但static
的使用使它实际上是一个糟糕的选择。 对单例的需求是在应用程序运行时只有一个类的实例可用。
以下是使用Guice创建单例实例所需的全部内容:
public class myModule extends AbstractModule {
protected void configure() {
bind(Service.class).to(ServiceImpl.class).in(Singleton.class);
}
}
当您要求Guice为您提供实例时,除非您自己做一些独特的范围,否则您将获得相同的实例。 默认情况下,单例将用于当前的Injector
实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.