Перейти к основному содержимому

Руководство по EventBus в Guava

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

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

2. Настройка

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

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>

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

3. Использование шины событий

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

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. Обработка события отмены подписки

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

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

4. Вывод

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

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