JavaAssist est une bibliothèque de classes pour manipuler votre Java Byte Code sans toucher à la source. Prenons un exemple de mesure
temps d'exécution d'une méthode.
public class Subject {
/**
* Timetaken for start & end of the method
*
* @throws InterruptedException
*/
public void method2() throws InterruptedException {
// Some business logic :)
Thread.sleep(2000);
}
}
Pour mesurer le temps pris pour l'exécution d' subject.method2()
, vous pouvez améliorer l' Subject.methods()
par l'ajout de code de début et de fin de la méthode comme indiqué.
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
}
}
}
Sortie:
Début : Mercredi 26 Mai à 17:24:18 EDT 2010
Fin : Mercredi 26 Mai à 17:24:20 EDT 2010
Référence
http://www.csg.is.titech.ac.jp/~chiba/javassist/tutoriel/tutorial.html#lu
http://www.csg.is.titech.ac.jp/~chiba/javassist/html/
Origine de Poste à partir de:
http://www.senthilb.com/2010/05/javaassist-byte-code-enhancement.html