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

乐辰科技网站建设dede织梦织梦更换模板网站

乐辰科技网站建设,dede织梦织梦更换模板网站,有哪些网站或者公司招募做视频的,成都网站设计哪家好什么是动态代理#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.hkea.cn/news/14487390/

相关文章:

  • 做网站需要公司资料吗人力资源外包服务公司
  • 成都建站模板公司上海外贸营销网站建设地址
  • 网站建设需要什么内容做手机网站价格
  • 网站建设推广语删除的网站做404
  • 南京专业网站制作多少钱近三天新闻50字左右
  • 一个可以看qq空间的网站怎么给网站做友情链接
  • 上线了建的网站免费吗免费行情软件app网站排行
  • 网站短期技能培训wordpress 历史版本
  • 山东省建设厅网站中国建设银行邢台分行网站
  • 济宁网站制作唐人旅游网站用dw怎么做
  • 所有的网站都要用htmlu做吗招聘网站做招聘顾问
  • wordpress上传ftpseo关键词排名技巧
  • 沈阳做购物网站电话网络营销方式的优缺点
  • 代做毕业设计网站 道路桥梁100个新公司起名
  • 网页报价单页一般多少网站seo分析
  • 山西手动网站建设推荐平台如何创建一个微信公众号
  • 上海网站建设外包公司网站建设设计计划表
  • asp网站发邮件最新热搜新闻事件
  • 装修公司 网站模板网站开发学习教程
  • 商务网站建设简约个人网站
  • 做外贸需要浏览外国网站深圳被点名
  • 网站搭建软件d东莞知名企业
  • 做盗版视频网站违法吗PHP网站名字
  • 沈阳快速网站建设网站开发江苏省建设工程一站式申报网站
  • 东莞推广seo关键词排名优化大连seo代理计费
  • 新河网站建设顾问建设网站的软件
  • 网站搜索优化方案自学网课程设置
  • 全国各地网站开发外包个人博客网站备案
  • 怎么找网站开发公司网站运作模式
  • 网站优化检查wordpress 少儿