グアバのEventBusガイド

Guava’s EventBusのガイド

1. 概要

Guavaライブラリは、コンポーネント間のパブリッシュ/サブスクライブ通信を可能にするEventBusを提供します。 このチュートリアルでは、EventBusのいくつかの機能の使用方法を見ていきます。

2. セットアップ

まず、pom.xml:にGoogleGuavaライブラリの依存関係を追加します


    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. リスナーの登録

EventBusEventListenerクラスを登録することで、イベントをサブスクライブできます。

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の完全なソースコードとすべてのコードスニペットを見つけることができます。