版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhc2207221755/article/details/80316273
基于pub&sub模型,并且支持多订阅。
消息类:
public class OrderEvent {
private String message;
public OrderEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
订阅者:
public class HelloEventListener {
/**
* 使用Guava之后发布-订阅模式就变得很简单了,如果你需要订阅某种类型的消息,只需要在指定的方法上加上@Subscribe注解即可。
* @param event
*/
@Subscribe
public void listen(OrderEvent event) {
System.out.println(" HelloEventListener receive msg:"+event.getMessage());
}
}
public class MultiListener {
@Subscribe
public void listen(OrderEvent event) {
System.out.println(" MultiListener receive msg:"+event.getMessage());
}
@Subscribe
public void listen(String message){
System.out.println(" MultiListener receive msg:"+message);
}
}
使用@Subscribe来标记方法,处理订阅事件。
测试:
public class EventBusTest {
/**
* 测试单订阅者订阅一个消息情况
*/
@Test
public void testSimplePubSub(){
EventBus eventBus = new EventBus("jay");
eventBus.register(new HelloEventListener());
//publish event
eventBus.post(new OrderEvent("hello"));
eventBus.post(new OrderEvent("world"));
}
/**
* 测试一个订阅者可以订阅多个消息的情况
*/
@Test
public void testMultiPubSub(){
EventBus eventBus = new EventBus("jay");
eventBus.register(new HelloEventListener());
eventBus.register(new MultiListener());
eventBus.post(new OrderEvent("hello"));
eventBus.post(new OrderEvent("world"));
eventBus.post("1111");
}
}