• 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
    do good things。
  • 相关阅读:
    Java 利用 UUID 生成唯一性 ID 示例代码
    IntelliJ IDEA 使用前常用设置
    Tomcat 启动时项目报错 org.springframework.beans.factory.BeanCreationException
    MySQL-8.0.11 在 Windows10 上的安装
    Jwt在javaweb项目中的应用核心步骤解读
    nginx于tomcat项目整合(拆分静态文件)
    nginx提高加载静态文件速度
    Java构建网站多级菜单功能解决方案
    java手写的动态数组JimisunArray
    JavaIo编程基础复习
  • 原文地址:https://www.cnblogs.com/huane/p/5883490.html
Copyright © 2020-2023  润新知