怎么在Android中使用反射注解与动态代理

  介绍

今天就跟大家聊聊有关怎么在Android中使用反射注解与动态代理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>反射

主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

反射java中是一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本很高

<强>比较常用的方法

<李>

getDeclaredFields():可以获得类的成员变量

<李>

getDeclaredMethods():可以获得类的成员方法

<李>

getDeclaredConstructors():可以获得类的构造函数

<强>注解

java代码从编写到运行会经过三个大的时期:代码编写,编译,读取到JVM运行,针对三个时期分别有三类注解:

public  enum  RetentionPolicy  {/* *   ,* Annotations 断开连接;用be  discarded  by ,编译器。   ,*/源,/* *   ,* Annotations 断开连接;用be  recorded 拷贝,class  file  by ,编译器   ,* but  need  not  be  retained  by 从而VM  at  run 时间只却;能够is 从而违约   ,*的行为。   ,*/,类,/* *   ,* Annotations 断开连接;用be  recorded 拷贝,class  file  by 从而compiler    ,* retained  by 从而VM  at  run ,, so 活动对象;may  be  read 反思。   ,*   ,* @see  java.lang.reflect.AnnotatedElement   ,*/,运行时   以前,}
    <李>

    来源:就是针对代码编写阶段,比如@Override注解

    <李>

    类:就是针对编译阶段,这个阶段可以让编译器帮助我们去动态生成代码

    <李>

    运行时:就是针对读取到JVM运行阶段,这个可以结合反射使用,我们今天使用的注解也都是在这个阶段

使用注解还需要指出注解使用的对象

public  enum  ElementType  {/* *,阶级,interface  (including  annotation 类型),或是enum  declaration  */类型,/* *,Field  declaration  (includes  enum 常量),*/领域,/* *,Method  declaration  */方法,/* *,Formal  parameter  declaration  */参数,/* *,Constructor  declaration  */构造函数,/* *,Local  variable  declaration  */LOCAL_VARIABLE,/* *,Annotation  type  declaration  */ANNOTATION_TYPE,/* *,Package  declaration  */包,/* *   ,* Type  parameter 声明   ,*   ,* @since  1.8   ,* @hide  1.8   ,*/TYPE_PARAMETER,/* *   ,* Use  of  a 类型   ,*   ,* @since  1.8   ,* @hide  1.8   ,*/TYPE_USE   }

比较常用的方法

<李>

类型作用对象类/接口/枚举

<李>

字段成员变量

<李>

方法成员方法

<李>

参数方法参数

<李>

ANNOTATION_TYPE注解的注解

下面看下自己定义的三个注解

@Target (ElementType.FIELD)   @Retention (RetentionPolicy.RUNTIME)   ,public  @interface  InjectView  {   ,int 价值();   }

InjectView用于注入视图,其实就是用来代替findViewById方法

目标指定了InjectView注解作用对象是成员变量

保留指定了注解有效期直到运行时时期

价值就是用来指定id,也就是findViewById的参数

@Target (ElementType.METHOD)   @Retention (RetentionPolicy.RUNTIME)   @EventType (listenerType =, View.OnClickListener.class,, listenerSetter =,“setOnClickListener",, methodName    ,=皁nClick")   ,public  @interface  onClick  {   ,int[]值();   }

onClick注解用于注入点击事件,其实用来代替setOnClickListener方法

目标指定了onClick注解作用对象是成员方法

保留指定了onClick注解有效期直到运行时时期

价值就是用来指定id,也就是findViewById的参数

@Target (ElementType.ANNOTATION_TYPE)   @Retention (RetentionPolicy.RUNTIME)   public  @interface  EventType  {   Class  listenerType ();   String  listenerSetter ();   String  methodName ();   }

怎么在Android中使用反射注解与动态代理