码迷,mamicode.com
首页 > 其他好文 > 详细

动态代理

时间:2019-01-11 20:11:53      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:main   throw   实现   http   .com   rgs   obj   print   dynamic   

示例代码

package day19;

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

/**
 * 动态代理;
 * 
 * @author Lynn
 *
 */
interface Subject {
    public void show();
}

class RealSubject implements Subject {

    @Override
    public void show() {
        // TODO Auto-generated method stub
        System.out.println("调用的是被代理类的方法!");
    }

}

/**
 * 
 * MyInvocationHandler完成代理类和被代理类之间的方法调用的转换。
 *
 */
class MyInvocationHandler implements InvocationHandler {
    private Object obj;

    public Object getProxyObj(Object obj) {
        this.obj = obj;
        // 生成代理类,代理类和被代理类使用相同的类加载器,实现相同的接口;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // TODO Auto-generated method stub
        return method.invoke(obj, args);
    }

}

public class DynamicProxy {
    public static void main(String[] args) {
        RealSubject realsubject = new RealSubject();
        MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
        //代理对象;
        Subject proxy = (Subject) myInvocationHandler.getProxyObj(realsubject);
        proxy.show();
    }
}

运行结果

技术分享图片

动态代理

标签:main   throw   实现   http   .com   rgs   obj   print   dynamic   

原文地址:https://www.cnblogs.com/SnailsRunning/p/10256673.html

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