06.08 JDK靜態代理、動態代理、CGLIB代理之實例

1、靜態代理

a、定義個接口

JDK靜態代理、動態代理、CGLIB代理之實例

b、實現類

JDK靜態代理、動態代理、CGLIB代理之實例

c、添加一個靜態代理類Proxy

JDK靜態代理、動態代理、CGLIB代理之實例

d、測試實現

JDK靜態代理、動態代理、CGLIB代理之實例

2、JDK動態代理

a、添加一個代理JDKProxy,該代理實現InvocationHandler接口且覆寫invoke方法。

JDK靜態代理、動態代理、CGLIB代理之實例

b、測試實現

JDK靜態代理、動態代理、CGLIB代理之實例

3、Cglib動態代理

a、添加一個CglibProxy代理,同時實現MethodInterceptor接口。

JDK靜態代理、動態代理、CGLIB代理之實例

b、測試實現

JDK靜態代理、動態代理、CGLIB代理之實例

總結:

jdk靜態代理類只能為一個被代理類服務,如果需要代理的類比較多,那麼會產生過多的代理類。jdk靜態代理在編譯時產生class文件,運行時無需產生,可直接使用,效率好。

jdk動態代理必須實現接口,通過反射來動態代理方法,消耗系統性能。但是無需產生過多的代理類,避免了重複代碼的產生,系統更加靈活。

cglib動態代理無需實現接口,通過生成子類字節碼來實現,比反射快一點,沒有性能問題。但是由於cglib會繼承被代理類,需要重寫被代理方法,所以被代理類不能是final類,被代理方法不能是final。


分享到:


相關文章: