码迷,mamicode.com
首页 > 编程语言 > 详细

java动态代理

时间:2018-06-20 21:19:40      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:AC   load   []   return   handle   span   targe   row   传递   

一接口和实现类

interface Subject {
    public void hello();
}

class RealSubject implements Subject {
    @Override
    public void hello() {
        System.out.println("hello");
    }
}

二、创建代理实现类

class DynamicProxy implements InvocationHandler {
    // 代理的真实对象
    private Object target;

    public DynamicProxy(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("beffor");
        // 当代理对象调用真实对象的方法时,其会自动执行代理对象关联的handler对象的invoke方法来进行调用,
        // 无论何时调用代理对象的方法,调用处理器的 invoke 方法都会被调用, 并向其传递Method 对象和原始的调用参数。 调用处理器必须给出处理调用的方式
         method.invoke(target, args);
        System.out.println("affter");
        return null;
    }
}

三、测试代码

class ProxyTest {
    public static void main(String[] args) {
        Subject realSubject = new RealSubject();
        InvocationHandler invocationHandler = new DynamicProxy(realSubject);        
         /*
     * 通过Proxy的newProxyInstance方法来创建我们的代理对象,我们来看看其三个参数
     * 第一个参数  类加载器 handler.getClass().getClassLoader() ,我们这里使用realSubject这个类的ClassLoader对象来加载我们的代理对象
     * 第二个参数  一个class对象数组,每个元素都要实现的接口。我们这里为代理对象提供的接口是真实对象所实行的接口,表示我要代理的是该真实对象,这样我就能调用这组接口中的方法了
     * 第三个参数 一个调用处理器 invocationHandler, 我们这里将这个代理对象关联到了上方的 InvocationHandler 这个对象上
     * */
        Subject proxy = (Subject) Proxy.newProxyInstance(realSubject.getClass().getClassLoader(),
                realSubject.getClass().getInterfaces(), invocationHandler);
        proxy.hello();
        //realSubject.hello();
    }
}

 

java动态代理

标签:AC   load   []   return   handle   span   targe   row   传递   

原文地址:https://www.cnblogs.com/yugong/p/9205302.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!