google guava事件总线用法

时间:2022-11-10 20:46:27

Google EventBus

组成部分

  1. 事件(什么类型的事件);
  2. 事件监听器,即事件处理程序(响应);

  3. 注册事件监听器(register);

  4. 触发事件(trigger/post);

实例

事件,可以是任何自定义对象

/**
* Created by whuanghkl on 17/6/22.<br />
* 自定义事件
*/

public class AccessLoggerEvent {

}

事件监听器

/**
* Created by whuanghkl on 17/6/22.<br />
* 事件监听器
*/

@Component
public class AccessLoggerListener {
@Resource
private EventBus eventBus;

@PostConstruct
public void init() {
eventBus.register(this);
}

@Subscribe
public void logEvent(AccessLoggerEvent event) {
System.out.println("logEvent");
}
}

事件监听器自己注册到eventBus

在控制器中触发事件

AccessLoggerEvent accessLoggerEvent = new AccessLoggerEvent();
eventBus.post(accessLoggerEvent);

问题

  1. 什么时候注册事件监听器?
    在事件监听器创建完之后自动注册,使用注解 @PostConstruct
  2. 程序怎么知道那个事件监听器来响应?
    根据事件对象类型(可以是String等系统类型,也可以是自定义类)

参考:
spring+guava事件异步分发处理
Guava EventBus Spring