Java動态代理
@Date 2016.11.24
靜态代理
- 提前建立一個代理類,實作和業務邏輯同樣的接口
- 傳遞業務實作類的對象,在調用業務方法前後可以做代理的邏輯
- 擴充原有功能,不侵入原有代碼
- 如果需要代理的業務類變多,并且實作方法不一樣的情況下,對應的代理類會增多
Java本身動态代理
- 隻能代理接口
- 實作java.lang.reflect.InvocationHandler接口
- 通過Proxy.newProxyInstance (obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), InvocationHandler invocationHandler);建立代理類
- 虛拟機自動調用invoke方法
cglib動态代理
- 運作期間動态生成Java位元組碼
- 不用實作接口,直接底層生成代理類覆寫父類中的方法
- 實作MethodInterceptor接口的intercept方法
- 調用重寫方法比JDK本身的代理速度快
- 加載cglib耗時比JDK本身的時間長
- 不适合反複動态生成新的代理類