javassist 的简单使用
2013-02-20 11:42
176 查看
在回顾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的开发。
22222222
----------执行方法forJavassistTest()-----------
11111111111
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
相关文章推荐
- nginx学习笔记(1) 使用nginx搭建简单的HTTP服务器
- dom4j简单使用
- Spring Boot 的简单使用
- jsp中使用echarts简单示例
- 使用CSS制作简单的下拉菜单导航,用的是hover,js下次在分享
- VS2010中slider的简单使用
- viewpager的简单使用1
- iOS MAC终端 ~ sqlite3简单使用
- 简单的总结下项目中的框架 所使用的技术
- 超简单使用MemCached
- MongoDB —— Windows环境安装与简单使用
- Vue之vuex的简单使用
- JavaMail(1)--使用SMTP协议发送简单邮件
- QT中foreach的简单使用
- JAVA中JNI的简单使用
- Windows下Anaconda的安装和简单使用
- 使用spring的简单缓存
- nitification简单使用
- TODO:Google Analytics简单使用
- 简单使用Delphi中的TO-DO List