Javassist简单应用小结
来源:互联网 发布:python 实现月份加减 编辑:程序博客网 时间:2024/05/18 02:44
参考1:http://blog.csdn.net/mousebaby808/article/details/37696371 看点:修改类方法名
@Test
public void test() throws Exception {
// 获取本地类加载器
ClassLoader classLoader = getLocaleClassLoader();
// 获取要修改的类
Class<?> clazz = classLoader.loadClass("edu.alvin.reflect.TestLib");
// 实例化类型池对象
ClassPool classPool = ClassPool.getDefault();
// 设置类搜索路径
classPool.appendClassPath(new ClassClassPath(clazz));
// 从类型池中读取指定类型
CtClass ctClass = classPool.get(clazz.getName());
// 获取String类型参数集合
CtClass[] paramTypes = {classPool.get(String.class.getName())};
// 获取指定方法名称
CtMethod method = ctClass.getDeclaredMethod("show", paramTypes);
// 赋值方法到新方法中
CtMethod newMethod = CtNewMethod.copy(method, ctClass, null);
// 修改源方法名称
String oldName = method.getName() + "$Impl";
method.setName(oldName);
// 修改原方法
newMethod.setBody("{System.out.println(\"执行前\");" + oldName + "($$);System.out.println(\"执行后\");}");//注意:原来的方法是得到执行的,另外可以借助insertBefore等实现
// 将新方法添加到类中
ctClass.addMethod(newMethod);
// 加载重新编译的类
clazz = ctClass.toClass(); // 注意,这一行会将类冻结,无法在对字节码进行编辑
// 执行方法
clazz.getMethod("show", String.class).invoke(clazz.newInstance(), "hello");
ctClass.defrost(); // 解冻一个类,对应freeze方法
}
参考2:http://blog.csdn.net/yczz/article/details/14497527 看点:打印方法的参数,各种$符号的含义
参考3:http://blog.csdn.net/sadfishsc/article/details/9999169 基本用法
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用总结
- javassist 的简单使用
- servlet_request方法简单应用小结
- 母函数简单应用小结
- Javassist简单应用 - 不用学习JVM知识也可以修改class文件
- javassist
- Javassist
- Javassist
- JAVAssist
- Javassist
- javassist
- Spring MVC 原理小结+简单应用
- Spring MVC 原理小结+简单应用
- js获取url地址
- 文件转码
- 如何实现WebView和js页面的交互
- Halcon 算子 使用灰度获得图像区域
- react native中的layoutAnimation组件
- Javassist简单应用小结
- 线性回归 (linear regression model) 原理与代码实现
- cramfs根文件系统制作启动总结
- uname详细解读
- Redis和Memcache的区别
- 事件委托的优势 献给初学者
- bool findInt32(uint32_t key, int32_t *value)函数 =>个人理解!
- WSASocket写的简单的C/S端
- nasm dec