代码实例
/**
* 统计类的方法执行时间,要求,不修改原有的方法。
*/
interface IFoo {
void foo();
}
class DoFoo implements IFoo {
@Override
public void foo() {
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class TimeCountInvocationHandler implements InvocationHandler {
private DoFoo doFoo;
public TimeCountInvocationHandler(DoFoo doFoo) {
this.doFoo = doFoo;
}
// 方法代理
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
long start = System.nanoTime();
method.invoke(doFoo, args);
long end = System.nanoTime();
System.out.println(end - start);
return null;
}
}
class TimeCounter {
private IFoo doFoo = getIFooProxy(new DoFoo());
// 获取动态代理类
public IFoo getIFooProxy(DoFoo doFoo) {
return (IFoo) Proxy.newProxyInstance(doFoo.getClass().getClassLoader(), doFoo.getClass().getInterfaces(), new TimeCountInvocationHandler(doFoo));
}
public IFoo getDoFoo() {
return doFoo;
}
public static void main(String[] args) {
IFoo doFoo = new TimeCounter().getDoFoo();
doFoo.foo();
}
}
原文:https://www.cnblogs.com/bosslv/p/11358147.html