java.lang.instrument学习 (二),javassist实例练习
来源:互联网 发布:数组求平均值 编辑:程序博客网 时间:2024/04/27 18:33
学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的。其实有时候的需求很简单,无非就是看下类里的方法啊之类的。javassist是基于源码级别的API比基于字节码的ASM简单。下面就是对使用到的类打印出所有方法的Transformer:
public class TestTransformer implements ClassFileTransformer { @Override public byte[] transform(ClassLoader classLoader, String className, Class<?> aClass, ProtectionDomain protectionDomain, byte[] bytes) throws IllegalClassFormatException { //javassist的包名是用点分割的,需要转换下 String compareClass = className.replace('/', '.'); //通过包名获取类文件 CtClass clazz = null; try { clazz = ClassPool.getDefault().get(compareClass); CtMethod[] methods = clazz.getMethods(); for(CtMethod method:methods){ System.out.println(className + ",has method:" + method.getName()); } } catch (NotFoundException e) { e.printStackTrace(); } return bytes; }}
再说下IDEA上面怎么打jar包和调试这样的程序。首先点击Project structure。点左边的Artifacts,然后点“+”选jar,再选Empty。然后对jar包取个名字,在Output Layout里加入你想要打进去的资源。如果定义了MF文件,设置下MF文件路径。
点击ok之后就可以在Build菜单中选择Build Artifacts 就ok了。jar包的目录在上面配置的Output directory里。如果你的测试代码放在同一个工程里,可以在新建一个Application应用,然后在VM options中配置jar包的路径 -javaagent:/Users/ykdsg/my_workspace/class_instrument/out/artifacts/hackX/hackX.jar 。这样就ok了,debug的时候,断点甚至能进入Transformer,IDEA还是相当牛逼的。
- java.lang.instrument学习 (二),javassist实例练习
- java.lang.instrument 学习(一)
- java.lang.instrument 学习(一)
- java.lang.instrument 学习(一)
- java.lang.instrument 学习(一)
- java.lang.instrument 学习(一)
- [转]java.lang.instrument 学习(一)
- java.lang.instrument 学习(一)
- java java.lang.instrument 学习
- java基础(31)--java.lang.instrument 学习
- java.lang.instrument包初步学习
- Package java.lang.instrument
- JDK源码-java.lang.instrument-第一部分-源码学习
- Java Instrument (二) JVMTI
- 转java.lang.Instrument初探
- java.lang.instrument实现aop
- java instrument学习
- java javassist使用实例
- 结构(struct)
- hadoop的mapreduce常见算法案例有几种
- 8 个必备的PHP功能开发
- 在vim中显示gbk字符
- 【SDOI 2011】打地鼠
- java.lang.instrument学习 (二),javassist实例练习
- default listener is not configured in grid infrastructure home
- 监控对象(Object)主要计算器(Counters)的参考值
- Sublime Text 2、3 中 Package Control 插件的安装
- 取石子问题
- ubuntu 下nginx安装
- WebAPP添加到iOS的桌面
- 3.13 sync函数-文件缓存与同步
- TortoiseSVN文件及文件夹图标不显示