🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 动态代理 动态代理:不用手动编写一个代理对象,不需要一一编写与目标对象相同的方法(静态代理),这个过程,在运行时 的内存中动态生成代理对象。------字节码对象级别的代理对象 动态代理的API: 在jdk的API中存在一个Proxy中存在一个生成动态代理的的方法newProxyInstance ![](https://box.kancloud.cn/3c64ab0158ab7e4a48dd609354557e1f_682x67.jpg) 返回值:Object就是代理对象 参数:loader:代表与目标对象相同的类加载器-------目标对 象.getClass().getClassLoader() interfaces:代表与目标对象实现的所有的接口字节码对象数组 h:具体的代理的操作,InvocationHandler接口 注意:JDK的Proxy方式实现的动态代理 目标对象必须有接口 没有接口不能实现jdk版动态代理 这边TargetInterface是接口 ~~~ TargetInterface objProxy = (TargetInterface) Proxy.newProxyInstance( Target.class.getClassLoader(), //与目标对象相同的类加载器 new Class[]{TargetInterface.class}, //这个也行target.getClass().getInterfaces() new InvocationHandler() { //invoke 代表的是执行代理对象的方法 @Override //method:代表目标对象的方法字节码对象 //args:代表目标对象的响应的方法的参数 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("目标方法前的逻辑"); //执行目标对象的方法 Object invoke = method.invoke(new Target(), args); System.out.println("目标方法后的逻辑"); return invoke; } } ); objProxy.method1(); String method2 = objProxy.method2(); System.out.println(method2); ~~~