千鋒教育2023版Java面試寶典Java面試200題(含美團(tuán)、字節(jié)、阿里大廠真
2023-07-15 17:24 作者:bili_99880469921 | 我要投稿

JDK和CGLIB兩種動(dòng)態(tài)代理的原理和區(qū)別:
JDK動(dòng)態(tài)代理:是利用反射生成一個(gè)實(shí)現(xiàn)代理類的匿名類->InvokeHandler來處理,缺點(diǎn):只能為接口創(chuàng)建代理類的實(shí)例.
實(shí)現(xiàn)步驟:
- 創(chuàng)建一個(gè)實(shí)現(xiàn)?
InvocationHandler
?接口的類,重寫?invoke
?方法. - 使用?
Proxy
?類的?newProxyInstance
?方法創(chuàng)建代理對(duì)象,傳入?yún)?shù). - 通過反射獲取構(gòu)造函數(shù),然后通過構(gòu)造函數(shù)創(chuàng)建動(dòng)態(tài)代理類實(shí)例.
CGLIB動(dòng)態(tài)代理:運(yùn)行時(shí)就可以對(duì)字節(jié)碼進(jìn)行修改和動(dòng)態(tài)生成,它是通過繼承的方式來實(shí)現(xiàn)代理的.子類中采用的方法攔截的技術(shù).
實(shí)現(xiàn)步驟:
- 創(chuàng)建一個(gè)實(shí)現(xiàn)?
MethodInterceptor
?接口的類,重寫?intercept
?方法. - 使用?
Enhancer
?類創(chuàng)建代理對(duì)象,設(shè)置被代理類和自定義的?MethodInterceptor
?實(shí)例。
- 區(qū)別:
- JDK 動(dòng)態(tài)代理適用于需要代理接口的情況.
- Cglib 動(dòng)態(tài)代理則適用于代理普通類的情況.
標(biāo)簽: