Ръководство за EventBus на Гуава

1. Общ преглед

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

2. Настройка

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

 com.google.guava guava 29.0-jre 
Най-новата версия можете да намерите тук.

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

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

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

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

В този урок използвахме прост пример като ръководство за това как да използваме Guava EventBus .

Можете да намерите пълния изходен код и всички кодови фрагменти за тази статия в GitHub.