简单实现一个基于jdk的动态代理

23 阅读1分钟
package ext.fhec.cp.builder;

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

public class dogntaidaili {

    public interface MingXing{
        public void sing();
    }

    class HuGe implements MingXing{
        @Override
        public void sing() {
            System.out.println("sing");
        }
    }

    static class MingXingProxyHandler implements InvocationHandler {
        private final MingXing mingXing;

        public MingXingProxyHandler(MingXing mingXing) {
            this.mingXing = mingXing;
        }

        @Override
        public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable {
            System.out.println("before sing");
            Object result = method.invoke(mingXing, args);
            System.out.println("after sing");
            return result;
        }
    }

    public static void main(String[] args) {
        MingXing mingXing = new dogntaidaili().new HuGe();
        MingXingProxyHandler mingXingProxyHandler = new MingXingProxyHandler(mingXing);
        MingXing object = (MingXing)Proxy.newProxyInstance(
                mingXing.getClass().getClassLoader(),
                mingXing.getClass().getInterfaces(),
                mingXingProxyHandler
        );
        object.sing();

    }

}