我在Java swing中有一个MVC应用程序,我想测量代码库中各个入口和出口点的nanotime()
。作为玩具示例,请考虑使用方法A到Z的类Foo
:
public class Foo(){
private void A(){
do task A1()
do task A2()
}
private void B(){...}
....
private void Z(){
do task Z1()
do task Z2()}
}
我需要修改方法A()和Z()来输出nanime():
public class Foo(){
private void A(){
do task A1();
do task A2();
System.out.println("Entry time: " + System.nanotime());
}
private void B(){...}
....
private void Z(){
do task Z1();
do task Z2();
System.out.println("Exit time: " + System.nanotime());
}
}
问题是我想在不改变Foo()的源代码的情况下进行这种分析。实际上,我需要做的不仅仅是打印纳米级,并且分析会使实际的方法逻辑混乱;我想不出实际的方法来做到这一点。一种方法是子类化Foo(),并重载方法;然而,这似乎很苛刻,因为代码库中还有其他几个类需要这样的处理。我不想在代码中添加4个新的子类。
在Python中,我可以在运行时重载这些方法(猴子修补),并将其封装在某个探查器对象中。
Java中是否有任何框架/方法可以做类似的事情?我见过动态代理,但不太明白它们是否适合这样的东西。