动态代理的使用

来源:互联网 发布:淘宝详情视频怎么制作 编辑:程序博客网 时间:2024/05/20 19:48
package com.tt;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//动态代理的使用interface Subject{    void action();}//被代理类class RealSubject implements Subject{    @Override    public void action() {        System.out.println("我是被代理类。。。。。。");    }}//代理类class MyInvocationHandler implements InvocationHandler{    Object obj;//可以理解为实现了接口的被代理类的对象声明    /**     * 1.给被代理类的对象进行实例化     * 2.返回一个代理类的对象     * @param obj     * @return     */    public Object blind(Object obj){        this.obj=obj;        //obj.getClass().getClassLoader():对被代理的类进行加载        //obj.getClass().getInterfaces():获取被代理类所实现的接口        //this:实现了InvocationHandler接口的对象        return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(),this);    }    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        Object returnVal=method.invoke(obj, args);        return returnVal;    }}public class TestProxy {    public static void main(String[] args) {        //被代理对象        RealSubject real=new RealSubject();        //创建一个实现了InvocationHandler接口的类的对象        MyInvocationHandler handler=new MyInvocationHandler();        //调用blind()方法,动态的返回一个同样实现了real所在类实现的接口的代理类对象        Object obj=handler.blind(real);        Subject sub=(Subject)obj;//些时sub就是代理类的对象        sub.action();//转到对InvocationHandler接口的实现类的invoke()方法的调用    }}
0 0
原创粉丝点击