繁体   English   中英

如何测试Guice Singleton?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM