Java AOP(Aspect-Oriented Programming)是通過代理模式實現的。在 AOP 中,可以通過創建一個代理對象來攔截并處理目標對象的方法調用。代理對象可以在目標對象的方法執行前、執行后、異常拋出等特定時機插入額外的代碼,從而實現橫切關注點的分離。
在 Java 中,有兩種方式可以實現 AOP:
靜態代理:通過手動編寫代理類來實現 AOP。代理類要實現與目標對象相同的接口,并在代理類中添加額外的邏輯。在調用目標對象的方法前后,通過調用代理類的方法來執行額外的邏輯。
動態代理:通過 Java 提供的動態代理機制來實現 AOP。動態代理使用了 Java 的反射機制,在運行時動態生成代理類。代理類是在運行時生成的,不需要手動編寫。通過指定目標對象和攔截器,可以在運行時生成一個代理對象,代理對象會攔截目標對象的方法調用,并在特定時機執行攔截器中的代碼。
在 Spring 框架中,AOP 通常使用動態代理實現。Spring 使用了 JDK 動態代理和 CGLIB 動態代理兩種方式來生成代理對象。如果目標對象實現了接口,Spring 將使用 JDK 動態代理生成代理對象。如果目標對象沒有實現接口,Spring 將使用 CGLIB 動態代理生成代理對象。