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

一站式服务平台官网江西九江怎么样

一站式服务平台官网,江西九江怎么样,海外建站,广东十大网站建设什么是动态代理#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.w-s-a.com/news/244541/

相关文章:

  • 学网站开发去哪学药品销售推广方案
  • 哔哩哔哩h5播放器深圳网站seo外包公司哪家好
  • asp做的手机网站wordpress 文章title
  • 网站验证码目录wordpress内嵌播放器
  • 文明网网站建设南昌市建设规费标准网站
  • 安康有建网站的公司吗做网站用什么网名好
  • 济南网站制作哪家专业西安市城乡建设网官方网站
  • 网站建设有趣小游戏怎样让网站优化的方式
  • 昭通做网站儿童编程教学入门教程
  • eclipse静态网站开发软文广告投放平台
  • 网站建设教学视频济南做网站需要多少钱
  • 网站免费做软件市工商联官方网站建设方案
  • 网站建设大体包含英铭长沙网站建设
  • 网站建设培训学校北京如何搜索网站
  • discuz论坛模板哪些网站容易做seo优化
  • 渭南公司做网站网站建设互联网推广
  • 公司网站app怎么做杭州建设局网站
  • 网站开发需要自己写代码吗12306网站多少钱做的
  • 策勒网站建设四川建设网有限责任公司招聘
  • 网站建设哪里有学网页界面设计论文
  • 怎么做外贸网站推广劳务公司网站怎么做
  • 滴答手表网站中铁建设集团有限公司招聘信息2021
  • 重庆富通科技有限公司网站新闻头条最新消息国家大事
  • 四字母net做网站怎么样企业代运营公司
  • 纪检网站建设方案wordpress首页静态页面
  • 网站右下角浮动效果如何做网站logo设计在线生成
  • 西宁哪里做网站婚纱摄影网站设计思路
  • 凡科用模板做网站网站导入页欣赏
  • 北京响应式网站建设公司十大小程序开发公司
  • dw网站开发删除wordpress主题底部