1. 程式人生 > >Java框架之Spring AOP 面向切面程式設計 有哪幾種實現方式?如何選擇適合的AOP實現方式?

Java框架之Spring AOP 面向切面程式設計 有哪幾種實現方式?如何選擇適合的AOP實現方式?

文章目錄


1. 實現方式

JDK 動態代理實現和 cglib 實現


2. JDK動態代理如何實現?

只能對實現了介面的類生成代理,而不是針對類,該目標型別實現的介面都將被代理。

原理是通過在執行期間建立一個介面的實現類來完成對目標物件的代理

2.1 主要的實現過程

  1. 定義一個實現介面 InvocationHandler 的類
  2. 通過建構函式,注入被代理類
  3. 實現 invoke( Object proxy, Method method, Object[] args)方法
  4. 在主函式中獲得被代理類的類載入器
  5. 使用 Proxy.newProxyInstance( ) 產生一個代理物件
  6. 通過代理物件呼叫各種方法

3. 如何選擇?

如果目標物件實現了介面,預設情況下會採用 JDK 的動態代理實現 AOP,也可以強制使用 cglib 實現 AOP。

如果目標物件沒有實現介面,必須採用 cglib 庫,Spring 會自動在 JDK 動態代理和 cglib 之間轉換。