纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

Java动态代理实现原理以及ASM技术

1月1日 星宿房投稿
  1。ProxyProxyprovidesstaticmethodsforcreatingdynamicproxyclassesandinstances,anditisalsothesuperclassofalldynamicproxyclassescreatedbythosemethods。
  Proxy是Java动态代理的类的父类,基本动态代理就是围绕着他来的
  怎么来实现一个动态代理的类呢,有两种方法,都是Proxy里的API提供的1。构造方法实例化
  1)我们需要代理实现的接口publicinterfaceEchoService{Stringecho(Stringname);}
  2)生成代理类
  就是下面这行代码,调用java。lang。reflect。ProxygetProxyClass此方法便可以生成一个代理类,获取他的类对象。C?proxyClassProxy。getProxyClass(Demo。class。getClassLoader(),EchoService。class);
  2)实例化对象
  我们知道实例化对象无非是Constructor。newInstance()么,但是我们不知道我们的构造方法是啥哇,好难哇,Java中规定如果你实现了一个构造方法,不会帮你生成无参的构造方法,此时我们就需要知道这个参数是啥,
  这里不卖关子了,上面不是说Proxy是多有代理对象的父类么,所以他绝对继承他的构造方法哇。此时一看,奥原来如此,竟然是InvocationHandler对象哇。protectedProxy(InvocationHandlerh){Objects。requireNonNull(h);this。}
  3)实例化一个InvocationHandler对象proxy代理对象,是我们生成的代理类的实例化对象,比如动态生成了Proxy1类,他就是这个类的实例化对象method当前调用的方法对象args当前方法的参数returnObject方法的返回值InvocationHandlerhandlernewInvocationHandler(){OverridepublicObjectinvoke(Objectproxy,Methodmethod,Object〔〕args)throwsThrowable{1。如果方法是继承自父类Object的方法,我们就交给代理对象实现if(method。getDeclaringClass()Object。class){returnmethod。invoke(this,args);}2。如果不是呢,我们就自己判断执行if(method。getName()。equals(echo)){returnHelloP}3。如果不符合我们的意思,我们就返回空值}};
  4)实例化终于到了EchoServiceservice(EchoService)proxyClass。getConstructor(InvocationHandler。class)。newInstance(handler);
  此时就拿到了我们的实例化对象
  测试一下System。out。println(toString:service);System。out。println(echo:service。echo(name));
  输出toString:com。java。proxy。Demo1682a0b20echo:HelloProxy2。静态方法
  这个依赖于java。lang。reflect。ProxynewProxyInstance这个方法EchoServiceechoService(EchoService)Proxy。newProxyInstance(Demo。class。getClassLoader(),newClass〔〕{EchoService。class},handler);
  此时就直接实现了,其实跟上面的原理一样,只不过是他封装了一个方法罢了publicstaticObjectnewProxyInstance(ClassLoaderloader,C?〔〕interfaces,InvocationHandlerh)throwsIllegalArgumentException{finalC?〔〕intfsinterfaces。clone();这个就是获取代理类,为JNI接口C?clgetProxyClass0(loader,intfs);try{获取构造方法finalC?conscl。getConstructor(constructorParams);finalInvocationH构造方法实例化对象,返回returncons。newInstance(newObject〔〕{h});}catch(IllegalAccessExceptionInstantiationExceptione){。。。。}}
  所以万变不离其宗,2。Proxy原理
  其实就是生成了一个代理类,这个代理类是继承了Proxy类,同时实现了我们的代理接口EchoService,所以很是方便,
  但是我们知道利用这种方式实现效率并不高,为什么呢,因为所有逻辑都是基于InvocationHandler。invoke()。实现的,同时层层封装效率也低。
  通过javapp我们发现确实如此publicfinalclassProxy0extendsjava。lang。reflect。Proxy{privatestaticjava。lang。reflect。Methodm1;privatestaticjava。lang。reflect。Methodm2;privatestaticjava。lang。reflect。Methodm0;publicProxy0(java。lang。reflect。InvocationHandler)publicfinalbooleanequals(java。lang。Object)publicfinaljava。lang。StringtoString()publicfinalinthashCode()static{}}
  我找了一张比较清晰的图,对于我们这些想学这玩意的人来说,其实这些都并不难的。
  3。CGLIBCGLIB其实是基于ASM实现的,ASM框架可以直接生成一个字节码文件(类)在运行时,所以他就是利用这个实现的,
  对于普通的开发者,在不了解Java字节码规范的情况下基本不可能会使用ASM框架,所以CGLIB做了个封装,简单轻巧,
  我们来说说他的核心思想,基本就是基于Java的继承来实现的,所以我们可以对他进行拓展,多以代理对象不能被final修饰
  核心对象就是Enhancer,中文意思就是增强剂,增强字节码,进行完成。publicclassSampleClass{publicvoidtest(){System。out。println(helloworld);}publicstaticvoidmain(String〔〕args){EnhancerenhancernewEnhancer();enhancer。setSuperclass(SampleClass。class);enhancer。setCallback(newMethodInterceptor(){OverridepublicObjectintercept(Objectobj,Methodmethod,Object〔〕args,MethodProxyproxy)throwsThrowable{System。out。println(beforemethodrun。。。);Objectresultproxy。invokeSuper(obj,args);System。out。println(aftermethodrun。。。);}});SampleClasssample(SampleClass)enhancer。create();sample。test();}}beforemethodrun。。。helloworldaftermethodrun。。。dependencygroupIdcglibgroupIdcglibartifactIdversion3。2。10versiondependency
投诉 评论

胎记图片解读10处有福气的胎记图片有福气的10处胎记解读:胎记出现的位置各有不同,记一般都是从新生儿的身上就能发现,而关于胎记的说法也有很多,下面解读10处有福气的胎记图片,一起来看看!胎记图片1、屁股下……19幅醒世图,叫醒天下退休人!非常有才,值得一看!生活是道复杂难解的题,但很多事情如果能想得明白一些,就会少走许多弯路。下面这些图里,藏着让余生变得更有趣、更有意义的道理,让我们一起来看看吧。1hr大胆唱出自己的歌。……碳水化合物的作用碳水化合物有那么重要哪些食物有碳水化合物的作用:碳水化合物有那么重要哪些食物有碳水化合物(carbohydrate)是由碳、氢与氧三种元素组成,因为它所含的氢氧的比例为二比一,与水一样,故称为碳水化合……藝文视界秋日心路一路上,车窗外的秋景倏忽而过、目不暇接。霜降作为秋的最后一个节气,以它独有的韵味展示绚丽灿烂。有诗言:停车坐爱枫林晚,霜月红于二月花。霜月的秋风犹如一个热情奔放的少女,信马由缰……祖安是什么意思梗祖安人打招呼梗解读祖安是什么意思?目前网络上关于祖安这个词成了网上的热搜词之一,这个梗词看起来比较新颖奇特。祖安人打招呼也成为了一个热梗,现在来大家解读下祖安人打招呼的梗……男孩得知考99分笑成表情包真实版的笑掉大牙!近日,在湖南衡阳,一段小男孩得知考了99分之后仰天大笑的视频在网上火了起来,该男孩笑起来的表情包在网上传了起来,不少网友纷纷表示,这就是真实版的笑掉大牙了!一起来看一下。1男孩……2020年清明节放假安排定了清明节的由来及习俗现在已经是3月13日了,相信很多人都在盼着清明节的到来,这样可以回家给已故亲人扫墓,那么,刚刚关于2020年清明节放假安排定了,4月4日至4月6日一共是三天,那么,关于清明节有……国内主要快递公司网点除湖北外全部复工推动各行业尽快复工近日,有消息称主要快递公司网点除湖北外全部复工,其中四通一达等中国主要快递公司,今天全国快递网点100复工,每天处理的快递量超过了去年同期,快递的相继复工推动了各行业尽快复工。……Java动态代理实现原理以及ASM技术1。ProxyProxyprovidesstaticmethodsforcreatingdynamicproxyclassesandinstances,anditisalsot……老人斗舞式文骂怎么回事现场画面曝光实在是可爱了近日,在网上流传的一段老人斗舞式文骂的视频,引起了大家的关注。什么是斗舞式文骂呢?现场详情画面曝光,实在是太可爱了。一起来看一下具体的情况。都说远……各类5本值得熬夜看完的小说2019不在书荒(精选)本文精选整理各类5本值得熬夜看完的小说,解救你的书荒,让你2019不在书荒。5本值得熬夜看完的小说(古代甜文小说)精选5本高质量古代甜文小说,熬夜也要看完(古言甜文穿越甜……如何保持头发乌黑浓密保养4个步骤头发乌黑又浓密现在的上班族,压力大、饮食不健康、熬夜睡得少,很容易导致年纪轻轻就脱发掉发的情况。头发大把大把的掉,相信已经引起了很多女生的注意了。那么头发如何保养才能乌黑又浓密呢?1、……
独家解读Meta紧急叫停全球数据中心在建项目背后的秘密独家解读Meta紧急叫停全球数据中心在建项目背后的秘密摘要Meta在全球运营着超过4000万平方英尺的18个数据中心园区,有47个数据中心正在建设中。如此庞大的设施……地产新政下的投资机会可以预计的是,在未来很长一段时间,中国的基准利率会维持在极低位。地产新十六条:鼓励金融机构为各类主体收购、改建房地产项目用于租赁住房提供资金支持,且该项贷款不纳入贷款集中……睡眠也有了新国标如未达标看着5个沾床即睡技巧话说睡眠也有新国标了,具体内容曝光:成人每日平均睡眠要达78小时。不知道这个睡眠标准你达标了吗?没达标的昕薇网给你介绍5个睡眠技巧,让你沾床就能睡的好方法。睡眠也有了新国标……是什么原因让你一定要用iphone最核心的:当国产手机陆陆续续内置了反诈功能(系统集成,无法卸载),但我每周收到的诈骗和骚扰电话却只增不减,我就确认下一台手机不能是国产手机了,大概率是iPhone吧。有些……经常睡不好嗜睡是什么原因如何改善睡眠经常睡不好嗜睡是什么原因:如何改善睡眠十个人里有一多半都会嗜睡,总是感觉睡不醒的状态,那人们经常嗜睡是什么原因导致的呢?如果经常发生嗜睡的情况其实对身体不是很好,当然免疫……最经典买家秀与卖家秀上演买时兴奋穿上郁闷(图)最经典买家秀与卖家秀上演,买家秀与卖家秀这些衣服买时兴奋穿上郁闷,买家秀与卖家秀的区别,看完以后再也不想买衣服了。这销魂的姿势也是醉了。衣服还是那件衣服,可是看客们……北京飞絮时间表曝光关于飞絮的知识你知道哪些?又是一年飞絮飘飘时,北京进入飞絮时间!北京飞絮时间表曝光。下面关于关于飞絮的知识一起来了解下吧。2019北京飞絮时间表曝光北京按照物候每年一般在清明前后即4月10日左右进……双面屏手机为什么一直无法获得市场和用户的认可?文小伊评科技在国内,首次出现的真正具备实际意义的双屏手机是来自于俄罗斯手机品牌所生长的yotaPhone,首次出现在2015年。此后,我们国家本土手机品牌也生产了众……女人面相痣图解标准女人面相痣图解(图)【女人面相痣图解】标准女人面相痣图解,面无好痣,特别是无缘无故生出来的,气色晦暗的痣为恶痣,头部痣与身体痣相对于眉毛有痣,肩膀、手就有痣;颧骨有痣,胸部就有痣。下面一起来看看吧……妹子脚趾甲10年不剪真相无奈(图)妹子脚趾甲10年不剪真相无奈(图)万千世界无奇不有,我们都知道女生爱美,喜欢留长长的指甲然后涂上美美的指甲油,但是一般人都是留手指甲,基本没有人会留脚趾甲,因为还要穿鞋嘛……卡塔尔世界杯阿根廷夺冠能拿多少奖金,球王梅西能分多少钱头条创作挑战赛2022年卡塔尔世界杯12月18日落下大幕,阿根廷75战胜法国夺得第二十二届世界杯足球赛冠军。这场比赛太刺激了,90分钟阿根廷先是2:0领先,打到78分钟姆……被蚊子咬肿红硬块被蚊子咬了怎么快速消肿【被蚊子咬肿红硬块】日常生活中,很多人常常被蚊子困扰,常常会被蚊子咬,却没有办法躲开。比如被蚊子咬了肿红硬块,被蚊子咬了又疼又痒。那么被蚊子咬了肿红硬块该怎么办?被蚊子咬了怎么……
友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形