import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
class DynamicProxyHandler implements InvocationHandler {
private Object proxied = new String("nothing");
public DynamicProxyHandler() {
}
public DynamicProxyHandler(Object proxied) {
this.proxied = proxied;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// System.out.println("**** proxy: "+proxied.toString()+ ", method: " + method + ", args: " + args);
System.out.println("**** proxy: "+proxy+ ", method: " + method + ", args: " + args);
if (args != null) {
for ( Object arg: args
) {
System.out.println(" "+arg);
}
}
long startTime = System.nanoTime();
//method.invoke(proxied,args);
//method.invoke(proxy,args);
long endTime = System.nanoTime();
System.out.println("invoke time spent:"+(endTime-startTime)+"ns");
return null;
}
}
public class SimpleDynamicProxy {
public static void consumer(InterFace interFace) {
interFace.doSomething();
String str = "aaaa";
System.out.println(str);
interFace.somethingElse(str);
}
public static void main(String[] args){
RealObject real = new RealObject();
///consumer(real);
//Insert a proxy and call again
InterFace proxy = (InterFace) Proxy.
newProxyInstance(
InterFace.class.getClassLoader(),
new Class[]{InterFace.class},new DynamicProxyHandler(real));
consumer(proxy);
}
}