Руководство по EventBus Гуавы

Руководство по EventBus Гуавы

1. обзор

Библиотека Guava предоставляетEventBus, которые позволяют осуществлять обмен данными между компонентами по подписке. В этом руководстве мы рассмотрим, как использовать некоторые функцииEventBus.

2. Настроить

Для начала добавляем зависимость библиотеки Google Guava вpom.xml:


    com.google.guava
    guava
    21.0

Последнюю версию можно найтиhere.

3. ИспользуяEventBus

Начнем с простого примера.

3.1. Настроить

Начнем с рассмотрения объектаEventBus. Он может регистрировать слушателей и публиковать события. Использовать его так же просто, как создать экземпляр класса:

EventBus eventBus = new EventBus();

Библиотека Guava дает вам свободу использованияEventBus любым способом, который наилучшим образом соответствует вашим потребностям в разработке.

3.2. Создание слушателей

Мы создаем класс слушателя, который имеет методы-обработчики для получения определенных событий. Мы аннотируем методы-обработчики с помощью@Subscribe. Метод принимает в качестве аргумента объект того же типа, что и публикуемое событие:

public class EventListener {

    private static int eventsHandled;

    @Subscribe
    public void stringEvent(String event) {
        eventsHandled++;
    }
}

3.3. Регистрация слушателей

Мы можем подписаться на событие, зарегистрировав наш классEventListener наEventBus:

EventListener listener = new EventListener();
eventBus.register(listener);

3.4. Отмена регистрации слушателей

Если по какой-либо причине мы хотим отменить регистрацию класса вEventBus, это также легко сделать:

eventBus.unregister(listener);

3.5. Публикация событий

Мы также можем публиковать события с помощьюEventBus:

@Test
public void givenStringEvent_whenEventHandled_thenSuccess() {
    eventBus.post("String Event");
    assertEquals(1, listener.getEventsHandled());
}

3.6. Публикация пользовательских событий

Мы также можем указать собственный класс событий и опубликовать это событие. Начнем с создания пользовательского события:

public class CustomEvent {
    private String action;

    // standard getters/setters and constructors
}

Добавление метода обработчика в классEventListener для этого события:

@Subscribe
public void someCustomEvent(CustomEvent customEvent) {
    eventsHandled++;
}

Теперь мы можем опубликовать наше пользовательское событие:

@Test
public void givenCustomEvent_whenEventHandled_thenSuccess() {
    CustomEvent customEvent = new CustomEvent("Custom Event");
    eventBus.post(customEvent);

    assertEquals(1, listener.getEventsHandled());
}

3.7. Обработка событияUnsubscribed

Нам предоставляется классDeadEvent, который позволяет нам обрабатывать любые события, у которых нет слушателей. Мы можем добавить метод для обработки классаDeadEvent:

@Subscribe
public void handleDeadEvent(DeadEvent deadEvent) {
    eventsHandled++;
}

4. Заключение

В этом руководстве мы использовали простой пример в качестве руководства по использованию GuavaEventBus.

Вы можете найти полный исходный код и все фрагменты кода для этой статьиover on GitHub.