подписка на шину событий

#java #guava

#java #гуава

Вопрос:

Я пытаюсь использовать guava для подписки на EventBus. Пытаюсь просмотреть документ сайта, но не могу увидеть ни одного примера, где показано, как это сделать.

Кто-нибудь пробовал это раньше??

 private final EventBus eventBus = new EventBus();
eventBus.post(eventId); // where eventId is a string.
  

Это находится в одной из банок. Теперь мне нужно подписаться на эту шину событий и проверить, есть ли какие-либо новые события. Как я могу это сделать?

Любая помощь приветствуется.

Спасибо!!

Ответ №1:

Вам понадобится некоторый объект с аннотированным методом @Subscribe , который принимает параметр типа String (поскольку вы отправляете a String в качестве события для него … обратите внимание, что, вероятно, предпочтительнее какой-то более конкретный тип события). Затем вам нужно передать этот объект в метод EventBus.register(Object). Пример:

 public class Foo {
  @Subscribe
  public void handleEvent(String eventId) {
    // do something
  }
}

Foo foo = ...
eventBus.register(foo);
eventBus.post(eventId);
  

Ответ №2:

Вот простая демонстрация.

 public class EventBusDemo{

public static void main(String[] args) {
    handleTransaction();
}

public static void handleTransaction() {
    CatSubscriber catSubscriber = new CatSubscriber();
    PandaSubscriber pandaSubscriber = new PandaSubscriber();
    DogSubscriber dogSubscriber = new DogSubscriber();
    EventBus eventBus = new EventBus();
    Animal cat = new Cat();
    Animal dog = new Dog();
    Animal panda = new Panda();
    eventBus.register(pandaSubscriber);
    eventBus.register(catSubscriber);
    eventBus.register(dogSubscriber);

    eventBus.post(cat);
    eventBus.post(dog);
    eventBus.post(panda);

}
  

}

животное интерфейса {

 void run();
  

}

класс Cat реализует Animal {

 @Override
public void run() {
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // TODO Auto-generated method stub
    System.out.println(Cat.class.getSimpleName()   " run");
}
  

}

класс CatSubscriber {

 @Subscribe
public void catRun(Animal animal) {
    animal.run();
}
  

}

класс Собака орудия Животного {

 @Override
public void run() {
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // TODO Auto-generated method stub
    System.out.println(Dog.class.getSimpleName()   " run");
}
  

}

класс DogSubscriber {

 @Subscribe
public void dogRun(Animal animal) {
    animal.run();

}
  

}

класс Панда орудия Животного {

 @Override
public void run() {
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // TODO Auto-generated method stub
    System.out.println(Panda.class.getSimpleName()   " run");
}
  

}

класс pandasubscriberer {

 @Subscribe
public void pandaRun(Animal animal) {
    animal.run();
}
  

}

Комментарии:

1. Вам действительно следует добавить некоторое объяснение того, почему это должно работать — вы также можете добавить код, а также комментарии в сам код — в его текущем виде он не содержит никаких объяснений, которые могли бы помочь остальной части сообщества понять, что вы сделали для решения / ответа на вопрос. Это особенно важно для более старого вопроса и вопросов, на которые уже есть ответы.