guava中eventbus注解使用

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

 

转载于:https://www.cnblogs.com/huane/p/5883490.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值