動態代理模式

動態代理模式簡介:

動態代理能夠自動監聽代理對象的方法,並且能夠自動生成代理類的代碼,這樣就不需要我們自己去重寫代理對象裏的方法了,這樣解決了代理類代碼因業務龐大而龐大的問題,因爲動態代理模式會在代碼運行時根據代碼來在內存中動態生成一個代理類自動重寫代理對象的方法,然後這個動態代理類再調用處理類裏的代碼,處理類再調用到實際方法上去。而且我們可以選擇性的監聽代理對象的方法,有些不需監聽的方法就可以在處理類中過濾掉。所以動態代理的優勢就在於可以自動的對代理類的方法進行統一的處理,而不用手動去修改代理類裏的每個方法。

 

實現機制:

  實現一個簡單的動態代理需要四個類,第一步先編寫一個接口類並聲明需要的方法,第二步編寫實際的實現類實現接口的方法,第三步編寫ProxyHandler處理類,實現InvocationHandler接口,這個接口的方法是用來被動態代理類調用,和調用實際方法的,日誌打印或者異常監控等代碼語句可以寫在這個方法裏,最後編寫測試類,測試類的main裏要把實現類的對象反射出來,接着再把處理類的對象new出來,然後使用Proxy類調用生產動態帶來類的方法,並且把此方法返回的對象轉換成接口類型,最後使用這個接口類型的對象調用接口的方法。

在理論上可能描述的比較抽象、模糊,接下來看實際代碼就清晰明瞭了。

第一步編寫接口:

d159f505d1c609558ac3f3f6408fdc56.png


第二步編寫實現類:

650f749bbc5f2ac12db3b78a82baabde.png


第三步編寫處理類:

48f0e30013b0cb9fe3242410c46fdd9c.png


第四步編寫測試類:

d6211ae00365124f0bc1254fcec9c2b2.png


運行結果:

c921f1d2cadc3fd1e502f8cc91dc2134.png


代碼圖解:

151f606b349cd15f732f32d20c671d9a.png


Debug模式執行流程:

b45fbc98f9e77254e601733bc43bcaf7.png




返回:

a291e8f6f52489e144bc6498b5b9ad2d.png

46f2530f9e793da8b829a39a07bb4754.png

63f0f47e1252caf2fbc2b12a04e64faf.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章