jdk動態代理和cglib動態代理
阿新 • • 發佈:2018-06-13
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動態代理