1. 程式人生 > >jdk動態代理和cglib動態代理

jdk動態代理和cglib動態代理

java動態代理 分享 運行 相同 ref 面向 () JD 回調方法

參考:

http://www.importnew.com/22015.html

Java動態代理

技術分享圖片

上面的代碼運行的結果為:

I‘m proxy!

Welcome oschina hosee‘s blog

通過Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);來動態生成一個代理類,該類的類加載器與被代理類相同,實現的接口與被代理類相同。

當動態生成的代理類調用方法時,會觸發invoke方法,在invoke方法中可以對被代理類的方法進行增強。

Java動態代理的弊端

代理類和委托類需要都實現同一個接口。也就是說只有實現了某個接口可以使用Java動態代理機制。但是,事實上使用中並不是遇到的所有類都會給你實現一個接口。因此,對於沒有實現接口的類,就不能使用該機制。

CGLIB則可以實現對類的動態代理。

CGLIB

cglib是針對來實現代理的,他的原理是對指定的目標類生成一個子類,並覆蓋其中方法實現增強,但因為采用的是繼承,所以不能對final修飾的類進行代理。

cglib需要指定父類和回調方法。當然cglib也可以與Java動態代理一樣面向接口,因為本質是繼承

技術分享圖片

上面的代碼運行的結果為:

I‘m proxy!

Welcome oschina hosee‘s blog

jdk動態代理和cglib動態代理