反射之动态代理

此篇幅是反射的最后一章节,动态代理,如果熟悉Android开发且使用过Retrofit框架,应该就知道Retrofit框架实现的核心便是动态代理。

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; //实现Subject接口的被代理类对象的声明
    public Object bind(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 {
        return method.invoke(obj,args);
    }
}


/**
 * 动态代理模式
 */
public class DynamicProxy {

    public static void main(String[] args){
        //实例化 “被代理的类”
        RealSubject realSubject = new RealSubject();
        //实例化 “代理类”
        MyInvocationHandler myInvocationHandler = new MyInvocationHandler();
        //代理类对象“绑定”被代理的类对象
        Subject subject = (Subject) myInvocationHandler.bind(realSubject);
        //调用方法
        subject.action();
    }

}
 
 

好了,有关反射系列的知识介绍就到此段落了。


猜你喜欢

转载自blog.csdn.net/qq_33429583/article/details/79817875