2013-08-29 4 views
3

Как уже упоминалось here, гуавы ServiceManager можно получитьКак использовать Guava ServiceManager с Guice инъекций

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(); 

Как получить примеры запущенных сервисов?

p.s. Настройка сервисов, которые будут @Singleton, выглядит как хак.

+0

Я думаю, что у меня был тот же вопрос, но в другой форме. Вместо сервисов я управлял плагинами. В основном это касается многобиблиотечных и частных модулей. Я получил это здесь: http://stackoverflow.com/questions/6625837/generalize-guices-robot-legs-example-with-multibinding –

+0

hi @tanyehzheng это веб-приложение или рабочий стол? – Njax3SmmM2x2a0Zf7Hpd

+0

Несмотря на то, что я пытался использовать настольное приложение, мой вопрос не зависит от того, является ли это настольным приложением или веб-приложением. – tanyehzheng

ответ

0

На мой взгляд, установка сервисов @Singleton не является хаком вообще. Вероятно, я бы это сделал.

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

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

Затем вы можете просто ввести любой конкретный экземпляр службы, который вы хотите, в любом месте.

+0

Если это предназначенный для этого способ использования, я думаю, что они должны понять это, потому что легко ошибиться, забыв прокомментировать @Singleton и получить новый нестандартный экземпляр службы. Это довольно сложно отладить эту проблему. – tanyehzheng

+0

Это ли это также сервис в ServiceManager? – Njax3SmmM2x2a0Zf7Hpd

2

ServiceManager.getServicesByState().get(RUNNING) возвращает запущенные службы, а ServiceManager.getServicesByState().values() возвращает все службы, которыми управляет ServiceManager.

Смежные вопросы