JDK动态代理【2】DEMO以及效率比较

就用设计模式中的概念引入一个Demo吧,Demo的作用主要是要了解代理的使用方法和需要使用的类及接口。


关系图

1.Subject接口

public interface Subject {

    public void request();

}

2.RealSubject实现(委托类)

public class RealSubject implements Subject{

@Override

        public void request() {

                System.out.println("call method1");

        }

}

3.自定义的实现InvocationHandler的MyInvalcationHandler

public class MyInvalcationHandler implements InvocationHandler {

        T target;

        public MyInvalcationHandler(T target) {

           this.target = target;

        }

        @Override

        public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {

                System.out.println("call invoke start");

                return arg1.invoke(target, arg2);

        }

}

4.具体调用

public static void main(String[] args){

        System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

        System.out.println("run");

        Subject subject = new RealSubject();

        InvocationHandler handler = new MyInvalcationHandler(subject);

        Subject p = (Subject)Proxy.newProxyInstance(Person.class.getClassLoader(),

        new Class[]{Subject.class}, handler);

        p.request();

}

4.说明

生成的代理类传入了InvocationHandler ,在代理类调用request方法时,request方法会调用handler的invoke方法,invoke方法中可以嵌入自己想要嵌入的代码,同时通过传入的参数调用到委托类中request方法的具体实现。

你可能感兴趣的:(JDK动态代理【2】DEMO以及效率比较)