介绍
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版权协议,转载请附上原文出处链接和本声明。