Guava学习笔记--02. EventBus使用

Guava EventBus

EventBus 是Guava的一个发布订阅的模型,先看一个简单的实现:

  1. 定义一个Event的消息传递对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    public class TestEvent1 {
    private final int message;

    /**
    * 构造方法
    * @param message
    */
    public TestEvent1(int message) {
    this.message = message;
    // System.out.println("TestEvent1 事件message:"+message);
    }

    public int getMessage() {
    return message;
    }
    }

  1. 定义一个Listener

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class EventListener {
    public int lastMessage = 0;

    @Subscribe
    public void listen(TestEvent1 event) {
    lastMessage = event.getMessage();
    System.out.println("Message:"+lastMessage);
    }

    public int getLastMessage() {
    return lastMessage;
    }
    }

  2. 定义一个使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    public static void main(String[] args) {
    // 1.构造一个事件总线
    EventBus eventBus = new EventBus("test");

    // 2.构造一个事件监听器
    EventListener listener = new EventListener();

    // 3.把事件监听器注册到事件总线上
    eventBus.register(listener);

    // 4.事件总线发布事件,触发监听器方法
    eventBus.post(new TestEvent1(1));

    }

运行结果是:

1
Message:1

如果是多个方法需要调用,只需要在新方法上面加上@Subscribe注解。

1
2
3
4
5
@Subscribe         
public void listen2(TestEvent1 event) {
lastMessage = event.getMessage();
System.out.println("Message2:"+lastMessage);
}

如果想使用异步的方法处理,可以使用AsyncEventBus ,具体代码:

1
2
3

AsyncEventBus eventBus = new AsyncEventBus (Executors.newFixedThreadPool(3));

当然也可以注册多个EventListener。

1
2
eventBus.register(new EventListener());
eventBus.register(new EventListener2());