CGLib動態(tài)代理和JDK動態(tài)代理總結(jié)
動態(tài)代理與靜態(tài)代理相比較欣簇,最大的好處是接口中聲明的所有方法都被轉(zhuǎn)移到調(diào)用處理器一個集中的方法中處理,解耦和易維護
兩種動態(tài)代理的區(qū)別:
? ? ?JDK動態(tài)代理:要求目標(biāo)對象實現(xiàn)一個接口吊说,但是有時候目標(biāo)對象只是一個單獨的對象,并沒有實現(xiàn)任何的接口, ????????這個時候就可以用CGLib動態(tài)代理
CGLib動態(tài)代理,它是在內(nèi)存中構(gòu)建一個子類對象從而實現(xiàn)對目標(biāo)對象功能的擴展
JDK動態(tài)代理是自帶的晶渠,CGlib需要引入第三方包
CGLib動態(tài)代理基于繼承來實現(xiàn)代理啦租,所以無法對final類枪萄、private方法和static方法實現(xiàn)代理
Spring AOP中的代理使用的默認(rèn)策略:
????如果目標(biāo)對象實現(xiàn)了接口,則默認(rèn)采用JDK動態(tài)代理
????如果目標(biāo)對象沒有實現(xiàn)接口,則采用CgLib進行動態(tài)代理
????如果目標(biāo)對象實現(xiàn)了接扣嗓违,程序里面依舊可以指定使用CGlib動態(tài)代理