EventBus使用教程
简介
EventBus是一个基于发布订阅的事件总线,在Java和Android里都可以使用。它有很多优点:简化应用组件间的通信;解耦事件的发送者和接收者;避免复杂和容易出错的依赖和生命周期的问题;很快。
使用
- 引入pom
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
- EventBusConfig
@Configuration
public class EventBusConfig {
@Bean
public EventBus eventBus() {
EventBus eventBus = new EventBus();
return eventBus;
}
@Bean
public AsyncEventBus asyncEventBus() {
AsyncEventBus asyncEventBus = new AsyncEventBus("asyncDefault", ThreadPoolUtil.getThreadPool());
return asyncEventBus;
}
}
- EventBusListener
@Slf4j
@Component
public class EventBusListener {
@Subscribe
public void onMessageEvent(DncFilterExcelEvent event) {
log.info("Subscribe message:{}", event);
}
}
- EventBusHandler
@Component
public class EventBusHandler {
@Autowired
private EventBus eventBus;
@Autowired
private AsyncEventBus asyncEventBus;
@Autowired
private EventBusListener eventBusListener;
@PostConstruct
public void init() {
eventBus.register(eventBusListener);
asyncEventBus.register(eventBusListener);
}
@PreDestroy
public void destroy() {
eventBus.unregister(eventBusListener);
asyncEventBus.unregister(eventBusListener);
}
/**
* 同步处理
* @param event
*/
public void post(Object event) {
eventBus.post(event);
}
/**
* 异步处理
* @param event
*/
public void postAsync(Object event) {
asyncEventBus.post(event);
}
}