动态代理

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);

 

posted @ 2023-02-27 15:19  诸葛卧龙仙人  阅读(21)  评论(0)    收藏  举报