Javassist学习总结
来源:互联网 发布:大阪 知乎 编辑:程序博客网 时间:2024/05/23 22:19
要想将编译时不存在的类在运行时动态创建并加载,通常有两种策略:
1. 动态编译
2. 动态生成二进制字节码(.class)
对于第二种策略,实际上已经有诸多比较成熟的开源项目提供支持,如CGLib、ASM、Javassist等。这些开源项目通常都具备两方面的功能:
1. 动态创建新类或新接口的二进制字节码
2. 动态扩展现有类或接口的二进制字节码
其中,CGLib的底层基于ASM实现,是一个高效高性能的生成库;而ASM是一个轻量级的类库,但需要涉及到JVM的操作和指令;相比而言,Javassist要简单的多,完全是基于Java的API,但其性能相比前二者要差一些。
尽管如此,在性能要求相对低的场合,Javassist仍然十分有用,如JBoss中就调用了Javassist。
Javassist的官方网站如下:
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/
如下的链接是一个很好的Javassist代码示例:
http://yonglin4605.iteye.com/blog/1396494
如下的链接深入研究了Javassist中的一些语法,其中第8小节处对参数形式的总结很有作用:
http://zhxing.iteye.com/blog/1703305
如下的链接是IBM DW关于Javassist一个较为完整的教程:
http://www.ibm.com/developerworks/cn/java/j-dyn0916/
如下的代码是动态创建Java类二进制字节码并通过反射调用的示例,可供参考:
最后需要特别注意的是:
1. Javassist不支持要创建或注入的类中存在泛型参数
2. Javassist对@类型的注解(Annotation)只支持查询,不支持添加或修改
- Javassist学习总结
- Javassist学习总结
- Javassist学习总结
- Javassist学习总结
- Javassist学习总结
- Javassist学习总结
- Javassist学习总结
- Javassist总结
- javassist学习
- Javassist简单应用总结
- Javassist操作方法总结
- javassist学习笔记
- javassist 学习笔记
- Javassist学习1:简介
- javassist 学习笔记
- Javassist 学习笔记1
- Javassist 学习笔记2
- javassist学习三
- linux学习笔记一_2017-09-26
- Android 8.0 功能和 API
- CSS 用一个div写个旋转的齿轮(maybe船舵)
- Effective STL学习笔记-条款21
- 一.java多线程之实现方法
- Javassist学习总结
- JAVA IIntelliJ IDEA(2)-----使用Spring-boot-devTools无效解决办法
- 数据预处理之白化-Whitening
- Mysql数据库学习--时间戳
- 协议-网络层-IPv4
- 笔记
- 路径规划问题
- 每天一个linux命令-find之xargs(6)
- 大话设计模式之适配器模式