1接口
public interface ArithmeticCaculator {
int add(int a, int b);int sub(int a, int b);
}
2.实现类
public class ArithmeticCaculatorImpl implements ArithmeticCaculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public int sub(int a, int b) {
return a - b;
}
}
3.代理类
public class AritmethticCaculatorProxy {
// 要代理的目标对象
ArithmeticCaculator target;
public AritmethticCaculatorProxy(ArithmeticCaculator target) {
this.target = target;
}
public ArithmeticCaculator proxy() {
ClassLoader loader = target.getClass().getClassLoader(); // 代理对象由哪个类加载器加载
Class<?>[] interfaces = target.getClass().getInterfaces(); // 代理对象所实现的接口
InvocationHandler invocationHandler = new InvocationHandler() {// 代理对象调用其中的方法时,執行該代碼
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before:" + Arrays.asList(args));
Object result = method.invoke(target, args);
System.out.println("result:" + result);
return result;
}
};
return (ArithmeticCaculator) Proxy.newProxyInstance(loader, interfaces, invocationHandler);
}
}
4.测试
public class ceshi {
public static void main(String[] args) throws Exception {
ArithmeticCaculator arithmeticCaculator =new ArithmeticCaculatorImpl();
AritmethticCaculatorProxy Proxy =new AritmethticCaculatorProxy(arithmeticCaculator );
ArithmeticCaculator target =Proxy.proxy();
target.add(1, 2);
}
}