JDK代理(必须代理类要实现一个接口)

代理:

代理公司:比如员工员工出差,中间买机票,订酒店  把中间的无关事情交给代理公司去办

Java

代理

直接调用方法运行

把方法告诉代理对象,让代理对象帮我执行

比如我每次在进行数据更新的时候要记录日志,记录日志的过程交给代理去做

 

JDK代理

public class MyProxy  implements InvocationHandler {

 

    private Object obj;//需要代理的对象

 

    public MyProxy(Object obj) {

        this.obj = obj;

    }

 

    public Object getObj() {

        return obj;

    }

 

    public void setObj(Object obj) {

        this.obj = obj;

    }

 

 

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

 

        long start =System.currentTimeMillis();

        //反射调用方法

        Object invoke = method.invoke(obj, args);

 

        long end=System.currentTimeMillis();

        System.out.println("用时"+(end-start));

        return invoke;

    }

}

 

 

  @Test

    public void test1(){

        //需要被代理的对象

        CardDao dao=new CardDaoImpl1();

        //交给代理类

        MyProxy proxy=new MyProxy(dao);

        //让代理公司代为执行

        CardDao d = (CardDao) Proxy.newProxyInstance(dao.getClass().getClassLoader(), dao.getClass().getInterfaces(), proxy);

        d.update();

    }

 

posted @ 2020-05-19 18:56  master_hxh  阅读(421)  评论(0编辑  收藏  举报