Javassist是一个类库,可以在不接触源代码的情况下操纵您的Java字节码。 让我们举一个例子来衡量执行一个方法所花费的时间。
public class Subject {
/**
* Timetaken for start & end of the method
*
* @throws InterruptedException
*/
public void method2() throws InterruptedException {
// Some business logic :)
Thread.sleep(2000);
}
}
要测量执行subject.method2()所花费的时间,可以通过添加所示方法的代码开头和结尾来增强Subject.methods()。
public class JavaAssist {
public static void main(String[] args) {
timeTaken();
}
public static void timeTaken() {
try {
ClassPool p = ClassPool.getDefault();
CtClass cc = p.get("Subject");
CtMethod meth2 = cc.getDeclaredMethod("method2");
meth2.insertBefore("System.out.println(\" Start : \"+new java.util.Date());");
meth2.insertAfter("System.out.println(\" End : \"+new java.util.Date());");
// cc.writeFile(".");
Class c = cc.toClass();
Subject s = (Subject) c.newInstance();
s.method2();
cc.detach();
} catch (Exception e) {
// suppressed
}
}
}
输出:开始时间:美国东部时间2010年5月26日星期三17:24:18完:美国东部夏令时间2010年5月26日星期三17:24:20
参考[http://www.csg.is.titech.ac.jp/~chiba/javassist/tutorial/tutorial.html#read]
[http://www.csg.is.titech.ac.jp/~chiba/javassist/html/]
发件人来源:[http://www.senthilb.com/2010/05/javaassist-byte-code-enhancement.html]