`
leadtoit
  • 浏览: 63263 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

guava笔记12-EventBus

 
阅读更多

JDK从1.0开始就存在Observer和Observable,可以用来完成生产者/消费者这样的需求。其实也是观察者模式的实现。

 

Guava使用EventBus来实现类似的功能,但是用起来比Observer更方便。

直接拿代码来讲解吧。

//定义消息实体

class EventObj{

private String info;

public EventObj(String info){

this.info = info;

}

public String getInfo(){

return info;

}

}

 

//消息订阅者

class MySubcribler{

@Subscribe

public void recordInfo(EventObj eventObj){

System.out.println("first subscribe:"+eventObj.getInfo());

}

@Subscribe

public void recordInfo2(EventObj eventObj){

System.out.println("second subscribe:"+eventObj.getInfo());

}

@Subscribe

public void recordDeadEvent(DeadEvent deadEventObj){// 没有订阅者的消息一律为DeadEvent

System.out.println("dead event:"+deadEventObj.getEvent());

}

}

 

@Test

public void testEventBus(){

EventBus eventBus = new EventBus();

 

eventBus.register(new MySubcribler());//注册订阅者,可以注册多个

 

EventObj eo = new EventObj("event info");

eventBus.post(eo);  //投递消息

 

eventBus.post("no subscriber"); //投递消息,该类型的消息没有订阅者

eventBus.post(9999); //投递消息,该类型的消息没有订阅者

 

}

 

运行上面的Test,结果如下:

second subscribe:event info

first subscribe:event info

dead event:no subscriber

dead event:9999

 

可以看到,EventBus用起来非常简单。

对于subscriber而言,只需要定义接到消息后如何处理即可,采用@Subscribe注解来表示。

 

对于publisher方而言,分为“注册订阅者”和“消息投递”两个步骤。

注册订阅者就是注册所有的subscriber。

消息投递就是发送一条消息,所有的subscriber会收到这条消息,但是只有参数类型跟消息类型一致的subscriber方法才会处理这条消息。

另外,有一种特殊的消息类型DeadEvent,任何没有subscriber接收的消息类型,都会被转换为DeadEvent。所有我们可以定义一个处理方法,接收DeadEvent类型的消息,一般可用于打印日志,或者排除问题。

 

消息监听具有继承的特性,如果订阅者A监听了TypeA类型的消息,那么他也会自动监听所有TypeA的子类型的消息。

 

分享到:
评论

相关推荐

    guava-30.0-jre-API文档-中文版.zip

    赠送jar包:guava-30.0-jre.jar; 赠送原API文档:guava-30.0-jre-javadoc.jar; 赠送源代码:guava-30.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-30.0-jre.pom; 包含翻译后的API文档:guava-30.0-jre-...

    guava-27.0.1-jre-API文档-中文版.zip

    赠送jar包:guava-27.0.1-jre.jar; 赠送原API文档:guava-27.0.1-jre-javadoc.jar; 赠送源代码:guava-27.0.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-27.0.1-jre.pom; 包含翻译后的API文档:guava-...

    guava-25.0-jre-API文档-中文版.zip

    赠送jar包:guava-25.0-jre.jar; 赠送原API文档:guava-25.0-jre-javadoc.jar; 赠送源代码:guava-25.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-25.0-jre.pom; 包含翻译后的API文档:guava-25.0-jre-...

    guava-28.2-jre-API文档-中文版.zip

    赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...

    guava-27.0-jre.jar

    guava-27.0-jre.jar

    camel-guava-eventbus-2.11.0-sources.jar

    jar包,亲测可用

    guava-29.0-jre-API文档-中英对照版.zip

    赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...

    guava-11.0.2-API文档-中文版.zip

    赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...

    guava-20.0-API文档-中文版.zip

    赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...

    guava-27.1-jre.jar

    guava-27.1-jre

    最新版 guava-30.1-jre.jar

    最新版 guava-30.1-jre.jar

    camel-guava-eventbus-2.11.1.jar

    jar包,亲测可用

    guava-28.2-android.jar

    guava-28.2-android.jar

    guava-28.2-jre-API文档-中英对照版.zip

    赠送jar包:guava-28.2-jre.jar; 赠送原API文档:guava-28.2-jre-javadoc.jar; 赠送源代码:guava-28.2-jre-sources.jar; 赠送Maven依赖信息文件:guava-28.2-jre.pom; 包含翻译后的API文档:guava-28.2-jre-...

    guava-29.0-jre-API文档-中文版.zip

    赠送jar包:guava-29.0-jre.jar; 赠送原API文档:guava-29.0-jre-javadoc.jar; 赠送源代码:guava-29.0-jre-sources.jar; 赠送Maven依赖信息文件:guava-29.0-jre.pom; 包含翻译后的API文档:guava-29.0-jre-...

    guava-26.0-android-API文档-中文版.zip

    赠送jar包:guava-26.0-android.jar; 赠送原API文档:guava-26.0-android-javadoc.jar; 赠送源代码:guava-26.0-android-sources.jar; 赠送Maven依赖信息文件:guava-26.0-android.pom; 包含翻译后的API文档:...

    guava-24.1-jre-API文档-中英对照版.zip

    赠送jar包:guava-24.1-jre.jar; 赠送原API文档:guava-24.1-jre-javadoc.jar; 赠送源代码:guava-24.1-jre-sources.jar; 赠送Maven依赖信息文件:guava-24.1-jre.pom; 包含翻译后的API文档:guava-24.1-jre-...

    guava-20.0-API文档-中英对照版.zip

    赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...

    guava-23.0-API文档-中文版.zip

    赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...

    camel-guava-eventbus-2.11.1-sources.jar

    jar包,亲测可用

Global site tag (gtag.js) - Google Analytics