注解基础:
1.注解的意义是什么?
注解本身没有任何意义,只是一个标识,它只有结合一些如反射,字节码插桩等技术才变得有意义。
1.怎么定义注解(@target,@retention,value(),自定义名字后用法也必须指定)
2.什么是元注解
3.如何自定义一个注解处理器:
三步走:1继承jdk类 2.推荐手动注册(autowire兼容gradle5.0+)3.Log用processorEnv 4.app模块annotationProcessor project(“引用”),注解类上写@susspressxxxx(注解全限定名表示该注解处理器只关心该类型注解)
4.注解运行时机
javac 搜集所有注解->封装成TypeElement->javac吊起注解处理程序->处理我们自定义注解类
5.自定义注解替换代码里的所有枚举类
注解应用场景:
作业1:
通过自定注解和反射技术完成findviewbyId功能
作业2:
注意反射与泛型的结合:
比如,Response<Data> apiResult = gson.fromJson(jsonStr,Response.class); 一定会报错,为什么呢?
作业3:
通过反射和注解实现页面跳转的参数注入
重点:能够说出应用场景和运用实例
代理模式
1.代理模式有3个角色:抽象角色,真实角色,代理角色
实例:比如http请求例子
2.静态代理的缺点:
当每个实现抽象接口的真实角色拥有多种技能时,也就是实现多种接口时,你会发现他的代理类也只能代理一种技能,即只实现了一种接口,必然就会增多很多代理类文件
3.动态代理:
解决静态代理的缺点,即用一个代理类实现全部代理技能。
具体讲下原理:
4.Retrofit其实就是对 动态代理,注解,反射的结合
5.作业:利用 动态代理,注解,反射 实现onclick,提示:在某个方法上加注解