Data-Mediator 专题之注解

698 阅读4分钟

由于Data-Mediator中介者框架用了编译时注解技术, 所以跟注解是分不开的。

Data-Mediator的注解

  • 1, @Fields注解

    • 简介: @Fields表示的是一个数据模型的所有属性字段。包含一系列的@Field集合. 比如:
    • 详细介绍:
    public @interface Fields {
    
      //表示所有是属性字段定义。
      Field[] value();
     
      //表示是否使用链式编程。 默认true.
      boolean enableChain() default true;
    
      //表示缓存的最大个数。 用于数据缓存
      int maxPoolCount() default 0;
    
      //是否为这个数据module生成 JsonAdapter. 详细见google/Gson
      boolean generateJsonAdapter() default true;
    }
    
    • 示例程序:(@Field的说明见下面)
        @Fields(value = {
       @Field(propName = "name"),
       @Field(propName = "id", seriaName = "_id"),
       @Field(propName = "age", type = int.class, flags = FieldFlags.FLAGS_MAIN_SCOPES_2 | FieldFlags.FLAG_EXPOSE_DEFAULT),
       @Field(propName = "grade", type = int.class, since = 1.3),
       @Field(propName = "nickName", since = 1.2, until = 2.6)
       }, generateJsonAdapter = false)
       public interface IStudent {
       }
    
  • 2, @Field注解

    • 简介: @Field表示的是一个属性字段。sample:
    @Field(propName = "testItem_1", type = Student.class,  since = 1.2, until = 2.0)
    //表示,属性名称 'testItem_1', 类型是Student, gson注解@since =1.2 , gson注解@until=2.0.
    
    • 详细介绍:
    public @interface Field {
         //字段的属性名称,将会影响属性相关方法名称(比如get/set)
         String propName();
         
      //  表示@SerializedName注解的名称  
         String seriaName() default "";
         
         //表示这个属性字段的基本类型,默认String。
         Class<?> type() default String.class;
         
         //表示 属性字段的复合类型。默认无。目前有COMPLEX_ARRAY(数组), COMPLEX_LIST(列表), COMPLEX_SPARSE_ARRAY(SparseArray)
         int complexType() default 0;
         
         //关于属性的标志。比如transient标志(影响Serializable序列化。) 所有的标志都可在FieldFlags类中可见到。
         int flags() default FieldFlags.FLAGS_MAIN_SCOPES_3;
         
         //表示Gson , @since注解的值. 必须要 >= 1.0
         double since() default 1.0;
         
         //表示Gson, @until的值.
         double until() default Integer.MAX_VALUE;
    }
    
  • 3, @GsonConfig介绍

    public @interface GsonConfig {
         //表示Gson注解的版本。 主要用于GsonBuilder.
         double version() default 1.0;
         // 表示是否生成JsonAdapter(用于搭配Gson), 本框架JsonAdapter支持SparseArray属性的
          boolean generateJsonAdapter() default true;
          //是否禁用所有的Gson相关的注解.
           boolean forceDisable() default false;
    }
    
  • 4, @GlobalConfig

    • 简介: 表示Data-mediator全局的配置(一个module只能一个).
    • 详细:
      public @interface GlobalConfig {
         //全局gson配置
          GsonConfig gsonConfig() default @GsonConfig();
      }
      
    • 示例:
        @GlobalConfig(gsonConfig = @GsonConfig(
                  version = 1.5,  //the gson version which will used by GsonBuilder.
                  generateJsonAdapter = true //default
         ))
      
  • 5, @ImplMethod

    • 简介: 用于声明实现方法的来源.
    • 详细:
    public @interface ImplMethod {
      //表示实现的方法的名称, 不指定表示和被注解的方法名称相同。
      String value() default "";
    
      //实现的方法来源于哪个类。(必须是静态的方法)
      Class<?> from() default void.class;
    }
    
    • 示例:
    @Fields({
      @Field(propName = "testItem100", type = FlowItem.class)
    })
    @ImplClass(TestUtil.class)
    public interface TestItem100 {
       //这里没有明确指定方法名称,所以来源的方法名称和这个相同
       //没有指定from, 所以实现类的方法来源于上面@ImplClass定义的TestUtil 类.
       @ImplMethod
       void parseStudent(Student stu, int key);
       //......
    }
       //here is the TestUtil.java
       public class TestUtil {
          //相比于数据模型的方法签名,只在最前面添加了一个参数。该数据模型的
           public static void parseStudent(TestSelfMethod1 tsf, Student stu, int key){
              //在这里去实现方法。。do something you want
           }
       }
    
  • 6, @ImplClass

    • 简介: 实现方法的来源类。
    • 详细:
    public @interface ImplClass {
      //实现方法的来源类
      Class<?> value();
    }
    
    • 示例:
    @Fields({
      @Field(propName = "testItem100", type = FlowItem.class)
    })
    //这里用@ImplClass表示实现方法的主要来源是TestUtil类
    @ImplClass(TestUtil.class)
    public interface TestItem100 {
       //这里没有明确指定方法名称,所以来源的方法名称和这个相同
       //没有指定from,实现类的方法来源于上面@ImplClass定义的TestUtil 类.
       @ImplMethod
       void parseStudent(Student stu, int key);
       //......
    }
       //here is the TestUtil.java
       public class TestUtil {
          //相比于数据模型的方法签名,只在最前面添加了一个参数。该数据模型的
           public static void parseStudent(TestSelfMethod1 tsf, Student stu, int key){
              //在这里去实现方法。。do something you want
           }
       }
    
  • 7, @Keep

    • 简介:
      这个注解用于表示字段field,方法method 不会被插件('data-mediator-intellij-plugin')生成方法时删除。
    • 示例:
      假设我要给module Student 添加静态变量 STATE_OK. 那么要想不被插件影响。 则需要这样做
      @keep  //添加后,插件生成时,将不会删除这个字段
      int STATE_OK = 1;
    
  • 8, 数据绑定的注解? 见下面

至此基本所有的注解都已说明完.

想要体验最新的特性 ?

请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。

欢迎大家star, fork,contribute ,提issue. 它会越来越棒。

Thanks for reading !

技术源于分享!