try {
methodHandler.onMethodStart(target);
start = System.currentTimeMillis();
result = doInvoke(method, args);
success = true;
methodHandler.onMethodFinish(target, System.currentTimeMillis() - start, null);
return result;
} catch (Throwable throwable) {
methodHandler.onMethodFinish(target, System.currentTimeMillis() - start, throwable);
throw throwable;
}