Java基于JDK实现动态代理

Java基于JDK实现动态代理

基于JDK实现动态代理例子:

​ 需要代理的接口:

public interface MyCalculator {
    /**
     * 定义参数加法
     * @param a
     * @param b
     * @return
     */
    int add(int a , int b);
}

​ 需要代理的类:

public class MyCalculatorImpl implements MyCalculator {
    @Override
    public int add(int a, int b) {
        return a + b;
    }
}

​ 代理类:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author zb
 * @date 2020/7/19 10:52
 * @Description:
 */
public class CalculatorProxy {

    public static Object getInstance(MyCalculatorImpl myCalculatorImpl){
        return Proxy.newProxyInstance(
                CalculatorProxy.class.getClassLoader()
                // 代理类实现的接口
                , myCalculatorImpl.getClass().getInterfaces()
                , new InvocationHandler() {
                    /**
                     * 反射方法
                     * @param proxy   代理对象
                     * @param method  代理方法
                     * @param args    方法参数
                     * @return     方法的返回值
                     * @throws Throwable
                     */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println(">>>>>>>>>> 方法开始执行");
                        Object invoke = method.invoke(myCalculatorImpl, args);
                        System.out.println("<<<<<<<<<< 方法结束执行");
                        // 方法返回值
                        return invoke;
                    }
                }
        );
    }
}

​ 测试类:

public class Main {

    public static void main(String[] args) {
        MyCalculatorImpl myCalculator = new MyCalculatorImpl();
        MyCalculator calculator  = (MyCalculator) CalculatorProxy.getInstance(myCalculator);
        int add = calculator.add(3, 4);
        System.out.println("add = " + add);
    }
}

测试结果:

>>>>>>>>>> 方法开始执行
<<<<<<<<<< 方法结束执行
add = 7

文章实例来自于 江南一点雨 spring系列教程

你可能感兴趣的:(springboot)