Guava EventBus 优雅使用案例

介绍

EventBus 是谷歌Guava包里的一个类,使用起来相当于观察者模式,可以设置订阅和取消订阅,也可以进行事件分发。

下面主要以Spring框架为例代码实现:

代码

文件夹结构

总共6个类
在这里插入图片描述

代码

这是一个Listenter 用来监听事件

import com.google.common.eventbus.EventBus;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public abstract class EventListener {

    public static EventBus eventBus = new EventBus();

    @PostConstruct // 在初始化时进行注册
    void register(){
        eventBus.register(this);
    }
}

其中的一个事件监听器,当事件是OrderMessage类型时进入

import com.google.common.eventbus.Subscribe;
import com.zza.designmode.invention.eventBus.message.OrderMessage;
import com.zza.designmode.invention.eventBus.message.ReduceMessage;
import org.springframework.stereotype.Component;

@Component
public class OrderEventListener extends EventListener {

    @Subscribe // 本注解表示订阅了事件
    public void deal(OrderMessage message) {
        System.out.println("orderEvent 处理");
        System.out.println(message);
        ReduceMessage reduceMessage = new ReduceMessage(20);
        eventBus.post(reduceMessage);
    }


}

另一个事件监听器 当事件是ReduceMessage 类型时进入

import com.google.common.eventbus.Subscribe;
import com.zza.designmode.invention.eventBus.message.ReduceMessage;
import org.springframework.stereotype.Component;

@Component
public class ReduceEventListener extends EventListener {

    @Subscribe
    public void deal(ReduceMessage reduceMessage) {
        System.out.println("reduce Event 处理");
        System.out.println(reduceMessage);
    }
}

三个很普通的消息事件类 这里写在一起了

@Data
public class Message {

    private String message;
}
@Data
@EqualsAndHashCode(callSuper = true)
public class OrderMessage extends Message {

    private String orderId;
}
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
public class ReduceMessage extends Message {
    private Integer allNum;
}


测试


    @Test
    void test() {
        EventListener.eventBus.post(new OrderMessage());
    }

结果

在这里插入图片描述

这里可以看到事件类型提交时 OrderMessage类型的
先在OrderEventListener 处理
然后再提交到ReduceEventListener 处理。

流程总结图

在这里插入图片描述


版权声明:本文为wenzhouxiaomayi77原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。