当前位置: 首页 > news >正文

乐辰科技网站建设义乌市建设局网站

乐辰科技网站建设,义乌市建设局网站,wordpress 用户字段,网站后台shopadmin输在哪里什么是动态代理#xff1f;以下为个人理解:动态代理就是在程序运行的期间#xff0c;动态地针对对象的方法进行增强操作。并且这个动作的执行者已经不是this对象了#xff0c;而是我们创建的代理对象#xff0c;这个代理对象就是类似中间人的角色#xff0c;帮…什么是动态代理以下为个人理解:动态代理就是在程序运行的期间动态地针对对象的方法进行增强操作。并且这个动作的执行者已经不是this对象了而是我们创建的代理对象这个代理对象就是类似中间人的角色帮助我们为目标方法嵌入一些其他的逻辑进去。jdk动态代理的原理jdk自带的动态代理的工作原理是利用反射的newInstance创建一个代理对象(proxy)获取到目标接口的方法然后我们就可以在Invoke之前或之后做操作。它抽取出了一个invokeHandler里面就有目标method。试想一下当我们拥有了class对象增强逻辑(invokeHandler)也就是增强的目标方法之后我们自己利用反射不利用Proxy也可以很容易写出我们自己的动态代理。但是问题就在于我们只有明确了目标类之后通过自己编写Proxy类实现目标接口往里面塞invoktionHandler, 最后New出来这个实实在在的对象。而jdk提供的动态代理却可以在并不知情的情况下帮我们做这一系列的动作。jdk生成代理类时并没有经历源码阶段编译阶段而是直接到字节码阶段它生成的代理类是看不到的因为它直接就是字节码文件了。 它帮我们继承了Proxy类并且还动态的帮助我们继承了目标接口。也就是说它帮我们写代码了。里面用到的技术是ASM技术它可以直接生成我们想要的字节码。jdk方法反射调用优化:invoke() 利用反射进行本地调用效率低下它在调用了一定的次数(16)之后会生成实例化对象变成正常调用。InvocationHandler接口publicinterfaceInvocationHandler {​ publicObjectinvoke(Objectproxy, Methodmethod, Object[] args)throwsThrowable; }源码CallerSensitivepublicstaticObjectnewProxyInstance(ClassLoaderloader, Class?[] interfaces, InvocationHandlerh) throwsIllegalArgumentException{ Objects.requireNonNull(h);​ finalClass?[] intfsinterfaces.clone(); finalSecurityManagersmSystem.getSecurityManager(); if (sm!null) { checkProxyAccess(Reflection.getCallerClass(), loader, intfs); }​ /* * Look up or generate the designated proxy class. */ Class?clgetProxyClass0(loader, intfs);​ /* * Invoke its constructor with the designated invocation handler. */ try { if (sm!null) { checkNewProxyPermission(Reflection.getCallerClass(), cl); }​ finalConstructor?conscl.getConstructor(constructorParams); finalInvocationHandlerihh; if (!Modifier.isPublic(cl.getModifiers())) { AccessController.doPrivileged(newPrivilegedActionVoid() { publicVoidrun() { cons.setAccessible(true); returnnull; } }); } returncons.newInstance(newObject[]{h}); } catch (IllegalAccessException|InstantiationExceptione) { thrownewInternalError(e.toString(), e); } catch (InvocationTargetExceptione) { Throwablete.getCause(); if (tinstanceofRuntimeException) { throw (RuntimeException) t; } else { thrownewInternalError(t.toString(), t); } } catch (NoSuchMethodExceptione) { thrownewInternalError(e.toString(), e); }}cglib动态代理的原理cglib动态代理的原理跟jdk的类似只不过它是基于父类继承也就是不需要实现接口就可以做增强。它的内部并不是InvoktionHandler,而是方法拦截器 MethodInterceptor 。前面的jdk动态代理它是利用ASM技术帮我们动态编写了一个proxy对象其中继承了Proxy父类实现了目标接口而cglib则是利用ASM直接帮助我们继承了目标类不需要接口。并且有所区别的是它不仅仅通过反射拿到method,还拿到了MethodProxy。MethodInterceptor接口 继承了Callback接口它的拦截方法里面有一个特殊的参数 MethodProxy,这玩意可以不通过反射调用方法通过invokeSuper() 方法可以直接正常调用。MethodProxy是怎么做到正常调用的其实就是我们前面提到的继承了Proxy父类之后就得到了父类的原始方法当我调用invokeSuper的时候直接调用的就是父类的原始方法。MethodInterceptorpublicinterfaceMethodInterceptorextendsCallback { Objectintercept(Objectvar1, Methodvar2, Object[] var3, MethodProxyvar4) throwsThrowable;}MethodProxyinvoke() 无反射调用invokeSuper() 无反射调用publicObjectinvoke(Objectobj, Object[] args) throwsThrowable { try { this.init(); MethodProxy.FastClassInfofcithis.fastClassInfo; returnfci.f1.invoke(fci.i1, obj, args); } catch (InvocationTargetExceptionvar4) { throwvar4.getTargetException(); } catch (IllegalArgumentExceptionvar5) { if (this.fastClassInfo.i10) { thrownewIllegalArgumentException(Protected method: this.sig1); } else { throwvar5; } }}publicObjectinvokeSuper(Objectobj, Object[] args) throwsThrowable { try { this.init(); MethodProxy.FastClassInfofcithis.fastClassInfo; returnfci.f2.invoke(fci.i2, obj, args); } catch (InvocationTargetExceptionvar4) { throwvar4.getTargetException(); }}
http://www.dnsts.com.cn/news/153457.html

相关文章:

  • 做网站需要多少带宽asp.net网站很快吗
  • 乐清网站制作公司电话仿冒网站制作
  • 云建站优势设计学校网站模板
  • 调查网站怎么做千图网素材免费下载
  • 江苏城乡建设职业学院官方网站入群修改网站后台
  • seo网站推广费用外贸建个网站多少钱
  • 教育培训网站设计郑州网站开发的公司电话
  • 全国建设部网站官网phpcms模板
  • 江苏高校品牌专业建设工程网站查企业电话软件哪个好
  • 百度网站下载安装做网站开发 甲方提供资料
  • 打开网站弹出qq对话框优化推广排名
  • 海外网站怎么浏览用div做网站中间部分
  • 工商注册号查询入口seo的实现方式
  • 佛山专业网站建设价格项目建设计划书
  • 英文网站如何做网站企业案例
  • 重庆欧勒精细有限公司网站策划书网站建设 图片压缩
  • 昆明网站建设公司乐网吉林省住房与城乡建设厅网站
  • 搜索引擎网站推广定义建设通网站上的业绩能否有用
  • 北京网站设计策划公司网站怎么进行优化
  • 宿迁市建设局投诉网站wordpress角色模板
  • 张家界建设局网站西安双语网站建设
  • 怎么做营销型网站设计网站只有一个首页单页面怎么做排名
  • 企业网站系统的设计与开发教程网站域名审核时间
  • 网站轮播广告动画怎么做阜阳哪里做网站
  • 如何在godaddy空间做手机网站做商城网站报价
  • 为什么要建设o2o网站进出口网站贸易平台有哪些
  • 网站标题title为什么不能频繁的改上海建交人才网官网
  • 阅读分享网站模板旅游网站建设哪家好
  • 网站如何做关键字收录wordpress jet插件
  • 无锡网络公司无锡网站设计给金融公司群做网站合法吗