動態代理就是利用反射和字節碼的技術,在運行期創建指定接口或類的子類(動態代理)以及其實例對象的技術,以達到無侵入性增強代碼的效果。
簡要描述下動態代理主要的兩種實現方式:
一、JDK原生動態代理
其中關鍵的兩個要素為:
Proxy:newProxyInstance()生成代理對象
InvocationHandler:invoke()增強方法
二、CGLIB(code generation library)動態代理
其中關鍵的兩個要素為:
Enhance:create()生成代理對象
MethodInterceptor:intercept()增強方法
兩者優缺點:
JDK原生動態代理:
java原生支持,不需要任何外部依賴,但只能基於接口進行代理。
CGLIB動態代理:
通過繼承的方式進行代理,無論目標對象是否實現接口都可以代理,但無法處理final的情況。