javassist 的简单使用
来源:互联网 发布:网络机顶盒软件2017 编辑:程序博客网 时间:2024/06/06 18:20
在回顾struts2的知识的时候,发现导入经典的几个jar文件后,会报一个错误就是
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
。。。。。。
Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
。。。。。。
在struts2后面的版本中添加了对javassist.jar的依赖
hibernate后面也用javassist.jar 替换了cglib.jar
cglib、javassist和jdk动态代理,都可以为我们生成代理类,从而进行aop的开发。
package com.ether.assist;public class Demo { public void forJavassistTest(){System.out.println("----------执行方法forJavassistTest()-----------"); }}
import javassist.CannotCompileException;import javassist.ClassPool;import javassist.CtClass;import javassist.CtMethod;import javassist.CtNewMethod;import javassist.NotFoundException;public class JavassitTest { public static void main(String[] args) throws NotFoundException, CannotCompileException, InstantiationException, IllegalAccessException{ CtClass ctClass=ClassPool.getDefault().get("com.ether.assist.Demo"); String oldName="forJavassistTest"; CtMethod ctMethod=ctClass.getDeclaredMethod(oldName); String newName=oldName+"$impl"; ctMethod.setName(newName); CtMethod newMethod=CtNewMethod.copy(ctMethod,"forJavassistTest",ctClass, null); StringBuffer sb=new StringBuffer(); sb.append("{System.out.println(\"22222222\");\n") .append(newName+"($$);\n") .append("System.out.println(\"11111111111\");\n}"); newMethod.setBody(sb.toString()); //增加新方法 ctClass.addMethod(newMethod); //类已经更改,注意不能使用A a=new A();,因为在同一个classloader中,不允许装载同一个类两次 Demo a=(Demo)ctClass.toClass().newInstance(); a.forJavassistTest(); }}body里是这样的字符串:{System.out.println("22222222");forJavassistTest$impl($$);System.out.println("11111111111");} 这里的forJavaassistTest$impl($$);类似方法调用。执行结果为:
22222222
----------执行方法forJavassistTest()-----------
11111111111
- javassist 的简单使用
- javassist 的使用
- 用javassist实现简单的动态代理
- javassist使用中遇到的问题记录
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用小结
- Javassist简单应用总结
- Javassist简单应用小结
- Javassist简单应用小结
- javassist使用实例
- javassist 介绍和使用
- java javassist使用实例
- javassist使用样例
- javassist使用样例
- Android 中使用Javassist
- 使用javassist框架进行动态的更改Class类
- java 使用javassist 动态修改注解的值
- PHP中this,self,parent的区别
- MyEclipse破解方法总结
- cscope的经典用法
- HTTP协议学习笔记
- iOS平台一套完善的Crash Report解决方案
- javassist 的简单使用
- visio2007或office 2007安装失败提示一个或多个受保护的windows文件导致office 2007安装失败
- linux平台上GPIO模拟I2C
- 文档在线预览(二)-使用JODConverter转换文档为PDF
- 一种快速治疗咳嗽的方法
- JQ选择器-知识总结
- Windbg简明教程
- 单例
- hadoop日常维护,备份、恢复、增加移除节点