如何在Guice Injection中使用Guava ServiceManager


here所述,可以通过获取Guava ServiceManager

ServiceManager manager = injector.getInstance(ServiceManager.class);

为了使这项工作,我在我的Guice模块中添加了以下内容:

@Provides
public Set<Service> services(){
    return ImmutableSet.<Service>of(MyService());
}

在我的主要课堂上,

ServiceManager manager = injector.getInstance(ServiceManager.class);
manager.startAsync().awaitHealthy();

如何获取已启动服务的实例?

附:将服务设置为@Singleton感觉就像一个黑客.

最佳答案 在我看来,将服务设置为@Singleton根本不是一个黑客.这可能就是我要做的.

@Provides @Singleton
public MyService myService() {
  return new MyService();
}

@Provides
public Set<Service> services(MyService myService) {
  return ImmutableSet.<Service>of(myService);
}

然后,您可以在任何地方注入任何您想要的特定服务实例.

点赞