FastAdmin表格中新增操作按鈕
阿新 • • 發佈:2022-03-03
代理模式是一種常用的設計模式,它分為靜態代理&動態程式碼
何為代理模式,他究竟解決什麼型別的問題
代理模式顧名思義就是代理一個類完成或擴充他的功能(即實現被代理類的方法),簡而言之,就是在不通過修改原始碼的情況下,新增新的功能,或者對原來的功能就行擴充套件。
如何區分靜態代理和動態代理
根據代理的建立時機
靜態:由程式設計師建立代理類或特定工具自動生成原始碼再對其編譯。在程式執行前代理類的.class檔案就已經存在了。
動態:在程式執行時運用反射機制動態建立而成。
靜態代理例子
通常靜態代理模式都是基於基於實現同一介面實現的
person介面
person介面的實現類huangs(被代理的類)
代理類personproxy
最後我們呼叫代理類的action方法
結果
靜態代理通過將被代理類和代理類實現同一介面,並且通過構造器傳值的方式,傳入被代理類的物件,最後在代理類的方法中即可實現對代理類方法的呼叫或增強。
靜態代理類在執行前已經由java編譯器編譯成class檔案,即在執行前就建立好了代理類物件。
動態代理例子
動態代理有兩種實現方法,一種是對實現了某一介面的類進行代理,二是對未實現某一介面的類進行。
這兩種動態代理使用的技術也不同,前者是使用JDK內建的api進行實現,後者是使用cglib代理進行實現。
JDK代理
jdk代理就是利用jdk提供的介面,動態的生成代理類,其實本質上是利用反射機制獲取到目標類物件,以及他的介面和方法,最後通過proxy代理物件建立
測試
另一種cglib藉助ASM載入位元組碼過於複雜,略