美文网首页
Android Annotations

Android Annotations

作者: ab64fd4eaee3 | 来源:发表于2017-03-20 01:34 被阅读36次

    Android主流IOC框架浅析

    Android Annotations,ButterKnife,Dagger,RoboGuice

    (1). 通过 @interface 定义,注解名即为自定义注解名

    2). 注解配置参数名为注解类的方法名,且:

    a. 所有方法没有方法体,没有参数没有修饰符,实际只允许 public & abstract 修饰符,默认为 public,不允许抛异常

    b. 方法返回值只能是基本类型,String, Class, annotation, enumeration 或者是他们的一维数组

    c. 若只有一个默认属性,可直接用 value() 函数。一个属性都没有表示该 Annotation 为 Mark Annotation

    (3). 可以加 default 表示默认值

    @Documented 是否会保存到 Javadoc 文档中

    @Retention 保留时间,可选值 SOURCE(源码时),CLASS(编译时),RUNTIME(运行时),默认为 CLASS,SOURCE 大都为 Mark Annotation,这类 Annotation 大都用来校验,比如 Override, SuppressWarnings

    @Target 可以用来修饰哪些程序元素,如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER 等,未标注则表示可修饰所有

    @Inherited 是否可以被继承,默认为 false

    5. Annotation 解析

    5.1 运行时 Annotation 解析

    (1) 运行时 Annotation 指 @Retention 为 RUNTIME 的 Annotation,可手动调用下面常用 API 解析

    method.getAnnotation(AnnotationName.class);

    method.getAnnotations();

    method.isAnnotationPresent(AnnotationName.class);

    public static void main(String[] args) {

    try {

    Class cls = Class.forName("cn.trinea.java.test.annotation.App");

    for (Method method : cls.getMethods()) {

    MethodInfo methodInfo = method.getAnnotation(

    MethodInfo.class);

    if (methodInfo != null) {

    System.out.println("method name:" + method.getName());

    System.out.println("method author:" + methodInfo.author());

    System.out.println("method version:" + methodInfo.version());

    System.out.println("method date:" + methodInfo.date());

    }

    }

    } catch (ClassNotFoundException e) {

    e.printStackTrace();

    }

    }

    5.2 编译时 Annotation 解析

    @SupportedAnnotationTypes({ "cn.trinea.java.test.annotation.MethodInfo" })

    public class MethodInfoProcessor extends AbstractProcessor {

    @Override

    public boolean process(Set annotations, RoundEnvironment env) {

    HashMap map = new HashMap();

    for (TypeElement te : annotations) {

    for (Element element : env.getElementsAnnotatedWith(te)) {

    MethodInfo methodInfo = element.getAnnotation(MethodInfo.class);

    map.put(element.getEnclosingElement().toString(), methodInfo.author());

    }

    }

    return false;

    }

    }

    相关文章

      网友评论

          本文标题:Android Annotations

          本文链接:https://www.haomeiwen.com/subject/iyqbnttx.html