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 .