Java中代理簡述

1、jdk動態代理和cglib代理的區別
1.jdk動態代理只能對實現了接口的類生成代理,而不是針對類。
2.cglib是針對類實現代理,只要是對指定的類生成一個子類,覆蓋其中的方法,由於是繼承,因此該類或方法最好不要聲明爲final。
2、靜態代理
1.靜態代理主要是在虛擬機啓動時經過改變目標對象字節碼的方式來完成對目標對象的加強,它與動態代理相比具備更高的效率,由於在動態代理調用的過程當中,還須要一個動態建立代理類並代理目標對象的步驟,而靜態代理則是在啓動時便完成了字節碼加強,當系統再次調用目標類時與調用正常的類並沒有差異,因此在效率上會相對高些。
2.Java1.5中引入java.lang.instrument,你能夠由此實現一個Java agent,經過此agent來修改類的字節碼即改變一個類,從而實現靜態代理。
3、spring中jdk與cglib代理方式:
1.若是目標對象實現了接口,默認狀況下會採用jdk的動態代理實現aop
2.若是目標對象實現了接口,能夠強制使用cglib實現aop
3.若是目標對象沒有實現接口,必須採用cglib庫,spring會自動在jdk動態代理和cglib之間轉換java

相關文章
相關標籤/搜索