美文网首页
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