Android AOP中注解处理解释器的作用有哪些

  介绍

本篇文章给大家分享的是有关Android AOP中注解处理解释器的作用有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>一、提取注释信息

当开发者使用了注释修饰了类,方法,领域等成员之后,这些注释不会自己生效,必须由开发者提供相应的代码来提取并处理注释信息。这些处理提取和处理注释的代码统称为APT(注释处理工具)。

JDK主要提供了两个类,来完成注释的提取:

<李>

Java.lang.annotation.Annotation接口:这个接口是所有注释类型的父接口。

<李>

java.lang.reflect.AnnotatedElement接口:该接口代表程序中可以被注解的程序元素。

1.1注释接口

这个接口比较少用,这个接口里面有四个方法:

package  java.lang.annotation;      public  interface  Annotation  {      ,boolean =(Object  obj);      ,int  hashCode ();      ,String  toString ();      ,//返回该注解的类,元素使用了多个注解的时候,可以进行输出判断   ,Class<? extends  Annotation>, annotationType ();   }

1.2 AnnotatedElement接口

该接口最常用的方法是isAnnotationPresent (), getAnnotation(类annotationClass):

package 数组;      import  java.lang.annotation.Annotation;      public  interface  AnnotatedElement  {      ,//判断此元素上是否存在指定类型的注解,如果存在则返回真,否则返回错误的   ,default  boolean  isAnnotationPresent (Class<?, extends  Annotation>, annotationClass), {   ,,return  getAnnotation (annotationClass), !=,空;   ,}      ,//返回此元素上存在的指定类型的注解,如果该类型的注解不存在,则返回零   ,& lt; T  extends  Annotation>, T  getAnnotation (Class, Annotation  getDeclaredAnnotation (Class, T [], getDeclaredAnnotationsByType (Class, T [], getAnnotationsByType (Class

<强>二、栗子一个

简单获取方法

2.1定义注解MyTag

@Target (ElementType.METHOD),//修饰方法   @Retention (RetentionPolicy.RUNTIME),//运行时可以获取   public  @interface  MyTag  {      }

2.2定义解析器

public  class  MyTagParser  {      ,public  static  void 过程(Object  clazz), {      try {才能   ,,for  (Method  Method : clazz.getClass () .getMethods ()), {   ,,,if  (method.isAnnotationPresent (MyTag.class)), {   ,,,,//获取到了,输出   ,,,,Log.e (“tag",“被mytag注解修饰的方法:“,+,method.getName ());   ,,,},{else    ,,,,Log.e (“tag",“没有被mytag注解修饰的方法:“,+,method.getName ());   ,,,}   ,,}   ,,},catch  (Exception  en), {   ,,en.printStackTrace ();   ,,}   ,}      }

2.3启动活动

public  class  MainActivity  extends 活动{      ,@Override   ,protected  void  onCreate (Bundle  savedInstanceState), {   super.onCreate才能(savedInstanceState);   ,,setContentView (R.layout.activity_main);//调才能用解析器   MyTagParser.process才能(这个);      ,}      ,@MyTag   ,public  void 暴躁的(){      ,}      ,public  void  testNo () {      ,}      }

2.4结果

运行就会看到输出,表示已经获取到了对应的实例

……   02-18  15:23:41.622  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:stopServiceAsUser   02-18  15:23:41.622  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:takeKeyEvents   02-18  15:23:41.622  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:testNo   02-18  15:23:41.622  12446 - 12446/?, E/标签:,被mytag注解修饰的方法:暴躁的   02-18  15:23:41.632  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:toString   02-18  15:23:41.632  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:triggerSearch   02-18  15:23:41.632  12446 - 12446/?, E/标签:,没有被mytag注解修饰的方法:unbindService   .......

Android AOP中注解处理解释器的作用有哪些