1、靜態代理
a、定義個接口
b、實現類
c、添加一個靜態代理類Proxy
d、測試實現
2、JDK動態代理
a、添加一個代理JDKProxy,該代理實現InvocationHandler接口且覆寫invoke方法。
b、測試實現
3、Cglib動態代理
a、添加一個CglibProxy代理,同時實現MethodInterceptor接口。
b、測試實現
總結:
jdk靜態代理類只能為一個被代理類服務,如果需要代理的類比較多,那麼會產生過多的代理類。jdk靜態代理在編譯時產生class文件,運行時無需產生,可直接使用,效率好。
jdk動態代理必須實現接口,通過反射來動態代理方法,消耗系統性能。但是無需產生過多的代理類,避免了重複代碼的產生,系統更加靈活。
cglib動態代理無需實現接口,通過生成子類字節碼來實現,比反射快一點,沒有性能問題。但是由於cglib會繼承被代理類,需要重寫被代理方法,所以被代理類不能是final類,被代理方法不能是final。
閱讀更多 碼農筆記Day 的文章