MyTest.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
class MyHandle implements InvocationHandler {
private final Object target;
MyHandle(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println(method.getName() + " begin");
Object res = method.invoke(target,args);
System.out.println(method.getName() + " end");
return res;
}
}
public class MyTest {
public static void main(String[] args) {
ICalc c = new ICalcImpl();
ClassLoader cl = MyTest.class.getClassLoader();
Class<?>[] interfaces = c.getClass().getInterfaces();
MyHandle myHandle = new MyHandle(c);
ICalc proxy = (ICalc) Proxy.newProxyInstance(cl, interfaces, myHandle);
int add = proxy.add(2, 1);
System.out.println("2 + 1 =" + add);
}
}
ICalc.java
public interface ICalc {
int add(int a, int b);
int sub(int a, int b);
}
ICalcImpl.java
public class ICalcImpl implements ICalc {
public int add(int a, int b) {
System.out.println("add......");
return a + b;
}
public int sub(int a, int b) {
System.out.println("sub......");
return a-b;
}
}