直接上代码
public class CalculatorProxy {
public static Calculator getProxy(final Calculator calculator){
InvocationHandler h = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("这是动态代理将要帮你执行方法");
Object result = method.invoke(calculator,args);
return result;
}
};
Class<?>[] interfaces = calculator.getClass().getInterfaces();
ClassLoader loader = calculator.getClass().getClassLoader();
Calculator proxy = (Calculator) Proxy.newProxyInstance(loader,interfaces,h);
return proxy;
}
}
其他类中调用
@Test
public void test(){
Calculator calculator = new MyMathCalculator();
calculator.add(1,2);
System.out.println("================");
Calculator proxy = CalculatorProxy.getProxy(calculator);
proxy.add(2,1);
}
返回结果对比