4

如前所述 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();

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

ps 将服务设置为 @Singleton 感觉就像是 hack。

4

2 回答 2

2

ServiceManager.getServicesByState().get(RUNNING)返回正在运行的服务,并ServiceManager.getServicesByState().values()返回ServiceManager管理的所有服务。

于 2013-08-29T14:44:24.070 回答
0

在我看来,将服务设置为@Singleton根本不是黑客行为。这大概就是我会做的。

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

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

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

于 2013-08-29T17:05:51.483 回答