package com.codekk.java.test.dynamicproxy;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import com.codekk.java.test.dynamicproxy.util.ProxyUtils;
/**
* Dynamic Proxy Demo
*
* @author trinea@codekk.com
*/
public class Main {
public static void main(String[] args) {
TimingInvocationHandler timingInvocationHandler = new TimingInvocationHandler(new OperateImpl());
Operate operate = (Operate)(Proxy.newProxyInstance(Operate.class.getClassLoader(), new Class[] {Operate.class},
timingInvocationHandler));
// call proxy instance method
operate.operateMethod1();
System.out.println();
operate.operateMethod2();
System.out.println();
operate.operateMethod3();
// print info of proxy class
System.out.println("proxy class is: " + operate.getClass().getName());
System.out.println("\r\nsuper class of proxy class is: " + operate.getClass().getSuperclass().getName());
System.out.println("\r\ninterfaces of proxy class are: ");
for (Class inter : operate.getClass().getInterfaces()) {
System.out.println("\t" + inter.getName());
}
System.out.println("\r\nmethods of proxy class are: ");
for (Method method : operate.getClass().getMethods()) {
System.out.println("\t" + method.getName());
}
// save proxy class to root of this project, you can use jd-gui to see content of the saved file
String saveFileName = "$Proxy0.class";
ProxyUtils.saveProxyClass(saveFileName, operate.getClass().getSimpleName(), operate.getClass().getInterfaces());
System.out.println("\r\nContent of " + operate.getClass().getSimpleName() + ".class has saved to file "
+ saveFileName + " at root of this project");
}
}