亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

基于JDK的動態(tài)代理原理分析 jdk動態(tài)代理底層原理( 二 )




運(yùn)行main方法,查看控制臺,大功告成 。至此,我們已經(jīng)完整的完成了一次動態(tài)代理的使用 。
動態(tài)代理的原理
生成的proxyInstance對象到底是什么,為什么調(diào)用它的sayHello方法會執(zhí)行CustomerHandler的invoke方法呢?
直接貼上proxyInstance的字節(jié)碼文件,我們就會恍然大悟了...
//$Proxy0是SaySomething的實現(xiàn)類,重寫了sayHello和sayBye方法public final class $Proxy0 extends Proxy implements SaySomething {private static Method m1;private static Method m3;private static Method m2;private static Method m4;private static Method m0;public $Proxy0(InvocationHandler var1) throws {super(var1);}static {try {m1 = Class.forName("java.lang.Object").getMethod("equals", Class.forName("java.lang.Object"));m3 = Class.forName("com.example.demo.hanmc.proxy.jdk.SaySomething").getMethod("sayHello");m2 = Class.forName("java.lang.Object").getMethod("toString");m4 = Class.forName("com.example.demo.hanmc.proxy.jdk.SaySomething").getMethod("sayBye");m0 = Class.forName("java.lang.Object").getMethod("hashCode");} catch (NoSuchMethodException var2) {throw new NoSuchMethodError(var2.getMessage());} catch (ClassNotFoundException var3) {throw new NoClassDefFoundError(var3.getMessage());}}//實現(xiàn)了接口的sayHello方法,在方法內(nèi)部調(diào)用了CustomerHandler的invoke方法,同時傳入了Method對象,//所以在CustomerHandler對象中可以通過mathod.invovke方法調(diào)用SyaSomthing的sayHello方法public final void sayHello() throws {try {//h是父類Proxy中的InvocationHandler對象,其實就是我們自定義的CustomHandler對象super.h.invoke(this, m3, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final void sayBye() throws {try {super.h.invoke(this, m4, (Object[])null);} catch (RuntimeException | Error var2) {throw var2;} catch (Throwable var3) {throw new UndeclaredThrowableException(var3);}}public final int hashCode() throws {//忽略內(nèi)容}public final boolean equals(Object var1) throws {//忽略內(nèi)容}public final String toString() throws {//忽略內(nèi)容}}
看到了生成的代理對象的字節(jié)碼文件,是不是一切都明白你了,原理竟然如此簡單^_^


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: