今天就跟大家聊聊有关怎么在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中使用反射注解与动态代理