Handles the method which was originally invoked on the proxy instance. A
typical usage pattern follows below:
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//do some processing before the method invocation
//invoke the method
Object result = method.invoke(proxy, args);
//do some processing after the method invocation
return result;
}