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

2020-02-17 09:50:32 浏览数 (2)

Guava EventBus

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

  1. 定义一个Event的消息传递对象
代码语言:javascript复制

 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
代码语言:javascript复制
 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;
     }
 } 
  1. 定义一个使用
代码语言:javascript复制
  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));

 }    
 

运行结果是:

代码语言:javascript复制
    Message:1

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

代码语言:javascript复制
    @Subscribe         
    public void listen2(TestEvent1 event) {
        lastMessage = event.getMessage();
        System.out.println("Message2:" lastMessage);
    } 

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

代码语言:javascript复制
AsyncEventBus eventBus = new AsyncEventBus (Executors.newFixedThreadPool(3));

当然也可以注册多个EventListener。

代码语言:javascript复制
  eventBus.register(new EventListener());
  eventBus.register(new EventListener2());

(本文完)

作者:付威 博客地址:http://blog.laofu.online 如有任何知识产权、版权问题或理论错误,还请指正。

0 人点赞