动态代理
1、定义接口
public interface Calculator { int add(int a,int b); int sub(int a,int b); int mul(int a,int b); int div(int a,int b); }
2、实现接口
public class CalculatorImpl implements Calculator{ @Override public int add(int a, int b) { int res = a+b; System.out.println("res:"+res); return res; } @Override public int sub(int a, int b) { int res = a-b; System.out.println("res:"+res); return res; } @Override public int mul(int a, int b) { int res = a*b; System.out.println("res:"+res); return res; } @Override public int div(int a, int b) { int res = a/b; System.out.println("res:"+res); return res; } }
3、代理类
public class ProxyCalculator { private Object target; public ProxyCalculator(Object obj) { this.target = obj; } public Object getProxy(){ ClassLoader classLoader = target.getClass().getClassLoader(); Class<?>[] interfaces = target.getClass().getInterfaces(); InvocationHandler handler = new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("要开始计算了..."); Object o = method.invoke(target, args); System.out.println("计算结束..."); return o; } }; return Proxy.newProxyInstance(classLoader,interfaces,handler); } }
4、测试
ProxyCalculator proxyCalculator = new ProxyCalculator(new CalculatorImpl()); Calculator calculator = (Calculator) proxyCalculator.getProxy(); calculator.add(1,6);

浙公网安备 33010602011771号