此篇幅是反射的最后一章节,动态代理,如果熟悉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(); } }
好了,有关反射系列的知识介绍就到此段落了。