运行时注解
在运行时拿到类的Class对象,反射机制利用之编译时注解
生成的Java代码是在生成的.java文件中,所以你不能修改已经存在的Java类,例如向已有的类中添加方法。这 些生成的Java文件,会同其他普通的手动编写的Java源代码一样被javac编译。因为没有反射,效率和直接调用方法没什么区别。ParcelableGenerator、butterknife 、androidannotaion都使用了类似技术。
涉及到Annotation Processor
java 编译时注解处理
Java 《注解篇》 编译时注解JDK动态代理
为已有类方法增加新功能,本质是利用字节码操纵技术,生成新的与原生类有相同接口
的com.sun.proxy.$ProxyXXXX.class。并在Proxy.newProxyInstance方法中,会先load这个代理class, 然后通过反射构造代理类的实例Cglib动态代理
也是为类方法增进新功能,也是通过字节码操纵,和JDK动态代理区别在于,新生类不用和原类实现同一接口。cglib主要靠的是继承关系
Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)JVM启动前静态Instrument
main函数执行前,对正在加载中的类修改其字节码,涉及javaagent/java.lang.instrument.ClassFileTransformer/字节码操纵技术等-
JVM启动后动态Instrument
main 函数开始运行之后,对正在加载的类修改其字节码,涉及javaagent/java.lang.instrument.ClassFileTransformer/字节码操纵技术等
Java对类魔法加工的一些技术
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。