guava中eventbus注解使用

路之石 路之石     2022-08-05     434

关键词:

guava是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。学会使用该库相关api的使用,能使我们代码更简洁,更优雅,本章节我们来谈谈guava中注解的应用:

 

第一步:定义一个注解类,用来标示订阅:

技术分享
1 @Beta  
2 @Target(ElementType.METHOD)  
3 @Retention(RetentionPolicy.RUNTIME)  
4 public @interface SubScribe {  
5 }  
View Code

 

备注:

a)@Target:定义注解的作用目标

  @Target(ElementType.TYPE)   //接口、类、枚举、注解 


  @Target(ElementType.FIELD) //字段、枚举的常量 
  @Target(ElementType.METHOD) //方法 
  @Target(ElementType.PARAMETER) //方法参数 
  @Target(ElementType.CONSTRUCTOR)  //构造函数 
  @Target(ElementType.LOCAL_VARIABLE)//局部变量 
  @Target(ElementType.ANNOTATION_TYPE)//注解 
  @Target(ElementType.PACKAGE) ///包

b)@Retention: 定义注解的保留策略

  @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含 
  @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得, 
  @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

c) @Document:说明该注解将被包含在javadoc中

 

第二步:定义事件event和订阅者Subscriber

技术分享
 1 public class Event {  
 2     private int massage;  
 3     public Event(int massage){  
 4         this.massage = massage;  
 5     }  
 6       
 7     public int getMassage(){  
 8         return massage;  
 9     }  
10 }  
View Code
技术分享
 1 public class Subscriber {  
 2     private int massage;  
 3       
 4     @SubScribe  
 5     public void listen(MyEvent event){  
 6         this.massage = event.getMassage();  
 7     }  
 8       
 9     public int getMassage(){  
10         return massage;  
11     }  
12 }  
View Code

 

第三步:自定义eventbus

技术分享
 1 public class EventBus {  
 2     @SuppressWarnings("unused")  
 3     private Object massage;  
 4     private Class<?> cl;  
 5     private Object obj;  
 6   
 7     public void register(Object obj) {  
 8         cl = obj.getClass();  
 9         this.obj = obj;  
10     }  
11   
12     public void post(Object massage) {  
13         this.massage = massage;  
14         for (Method m : cl.getDeclaredMethods()) {  
15             SubScribe sub = m.getAnnotation(SubScribe.class);  
16             if (sub != null) {  
17                 Class<?>[] params = m.getParameterTypes();  
18                 if (massage.getClass().equals(params[0])) {  
19                     try {  
20                         m.invoke(obj, massage);  
21                     } catch (IllegalAccessException e) {  
22                         e.printStackTrace();  
23                     } catch (IllegalArgumentException e) {  
24                         e.printStackTrace();  
25                     } catch (InvocationTargetException e) {  
26                         e.printStackTrace();  
27                     }  
28                 }  
29             }  
30         }  
31     }  
32 }  
View Code

 

Guava java EventBus实例化错误

】GuavajavaEventBus实例化错误【英文标题】:GuavajavaEventBusinstantiationerror【发布时间】:2012-07-0916:31:36【问题描述】:我正在尝试使用Google的Guava库的EventBus。从Guava的documentation中实例化一个EventBus对象应该很容易。我的代码:packaget... 查看详情

guava中eventbus分析(代码片段)

EventBus1.什么是EventBus总线(Bus)一般指计算机各种功能部件之间传送信息的公共通信干线,而EventBus则是事件源(publisher)向订阅方(subscriber)发送订阅事件的总线,它解耦了观察者模式中订阅方和事件源之间的强依赖关系。图片... 查看详情

guava源码学习eventbus

基于版本:Guava22.0Wiki:EventBus 0.EventBus简介提供了发布-订阅模型,可以方便的在EventBus上注册订阅者,发布者可以简单的将事件传递给EventBus,EventBus会自动将事件传递给相关联的订阅者。支持同步/异步模式。只能用于线程间... 查看详情

guava----eventbus事件驱动模型

...应。Spring的风靡正是由于攻克了高耦合问题。本篇介绍的EventBus中也用到了Spring中的依赖注入。来进行对象和对象间的解耦(如@Subscribe)。   Guava解决高耦合採用的是事件驱动模 查看详情

guava中treerangemap基本使用

...aceRangeMap<KextendsComparable,V>{@Nullable//返回值可能为空的注解Vget(Kvar1);//依照单点键取键所属区间相应的值@Nullable//返回值 查看详情

eventbus源码解析(代码片段)

概述本篇内容适合对EventBus有兴趣,或者已经对EventBus有一定使用经验的读者。如果读者此前还没有具体使用过EventBus,推荐阅读下笔者前文:android为什么要用EventBusregister关键逻辑:遍历当前注册的类,获取其... 查看详情

eventbus源码解析(代码片段)

概述本篇内容适合对EventBus有兴趣,或者已经对EventBus有一定使用经验的读者。如果读者此前还没有具体使用过EventBus,推荐阅读下笔者前文:android为什么要用EventBusregister关键逻辑:遍历当前注册的类,获取其... 查看详情

eventbus系列:模仿eventbus,自定义注解(代码片段)

找到带有@Subscribe注解的方法,并且调用。先看看@Subscribe的源码:@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public@interfaceSubscribeThreadModethreadMod 查看详情

eventbus简单的实现

EventBus是最近项目用到的,也只是会些简单的功能,不过感觉功能蛮强大的。代码链接:http://download.csdn.net/detail/qq_29774291/9629346EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。主... 查看详情

guava学习--事件驱动模型

转载:http://www.cnblogs.com/whitewolf/p/4132840.html     http://www.cnblogs.com/peida/p/EventBus.html 更好的文章:https://my.oschina.net/realfighter/blog/406342 Guava在guava-libraries中 查看详情

eventbus3.0使用详解(代码片段)

之前也提到过EventBus的使用方法不过3.0之后EventBus使用方法有所改变,主要是处理订阅消息用了注解的方式。还是先声明一下EventBus是发布/订阅事件总线。它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代... 查看详情

googleguava的消息总线:eventbus,java(代码片段)

googleguava的消息总线:EventBus,Javapom.xml添加引用:<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</ve 查看详情

googleguava的消息总线:eventbus,java(代码片段)

googleguava的消息总线:EventBus,Javapom.xml添加引用:<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>31.1-jre</ve 查看详情

eventbus之高效使用(代码片段)

EventBus之高效使用说起EventBus,作为一名Android开发者,应该不会太陌生,但是我们大部分都会根据官方文档直接进行使用,其实还有一种比较高效的使用方式。就是不使用注解的方式,在编译时期,对相关... 查看详情

eventbus之高效使用(代码片段)

EventBus之高效使用说起EventBus,作为一名Android开发者,应该不会太陌生,但是我们大部分都会根据官方文档直接进行使用,其实还有一种比较高效的使用方式。就是不使用注解的方式,在编译时期,对相关... 查看详情

如何实现自定义java运行时注解功能

...开发过程中,对注解有一定程度的接触,比如我们在使用EventBus的时候,我们声明@Subscribe(threadMode=ThreadMode.MainThread)来接受通过EventBus发出来的数据,还有ButterKnife,我们在使用OnClick添加点击事件或Bind绑定组件的时候,同样也有... 查看详情

理解android中的注解与反射

前言最近一段时间在研究EventBus和Retrofit的过程中,都遇到了注解这个概念。由于在学习Java的时候对这方面没有深入了解过,所以看起相关的代码来,总会有点不知其所以然,这里就注解和反射的使用做一下总结。这里我们先从... 查看详情

在spring中集成eventbus

参考技术AEventBus是一个事件驱动;1:定于事件,即自己写一个event对象;2:订阅者用@Subscribe注解3:注册EventBus.getDefault().register(订阅者);4:触发事件EventBus.getDefault().post(newevent对象());这些只是单机版本的,需要整合在spring中的话... 查看详情