天天看點

Java動态代理

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本身的時間長
  • 不适合反複動态生成新的代理類