首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring AOP 入門(九):面向切面編程核心概念與術語詳解

     編輯:Java 相關知識

什麼是 AOP?

AOP (Aspect Oriented Programming) 面向切面編程,通過預編譯或運行期動態代理,在不修改源代碼情況下給程序動態統一添加功能。
本質是 GoF 設計模式中「調用者與被調用者解耦」目標的又一實現。

AOP 核心術語(八大概念)

術語定義例子
Aspect (切面)橫切關注點的模塊化,如日志、事務、安全日志記錄切面
Join Point (連接點)程序執行過程中可插入切面的具體位置方法調用、異常拋出、字段修改
Advice (通知)切面的具體實現代碼,定義「做什麼」及「何時做」方法前記日志、異常後回滾
Pointcut (切入點)定義通知應用到哪些連接點的匹配規則execution(* com.service.*.*(..))
Introduction (引介)為現有類動態添加新方法/屬性讓任意類實現 Auditable 接口
Target Object (目標對象)被通知的對象,可為自定義類或第三方類UserServiceImpl
Proxy (代理)織入通知後生成的對象,外部透明使用UserService 的 JDK/CGLIB 代理
Weaving (織入)將切面應用到目標對象創建代理的過程編譯期/類加載期/運行期

織入時機三種

  1. 編譯期:需特殊編譯器(如 AspectJ ajc)
  2. 類加載期:需特殊類加載器(如 LTW)
  3. 運行期:Spring 默認方式,無需特殊工具,通過動態代理實現

織入時機

Spring AOP 實現機制

1. 通知用 Java 類編寫,切入點在 XML 配置

對比 AspectJ 需學習新語法,Spring 門檻極低。

2. 運行期創建代理,兩種方式

條件代理方式原理
目標實現接口JDK 動態代理java.lang.reflect.Proxy 生成實現同接口的新類
目標無接口CGLIB 代理生成目標類子類,重寫方法織入通知

3. 關鍵選擇原則

  • 優先用接口代理:產生更鬆耦合系統,面向接口編程
  • 類代理作為備選:兼容無接口的遺留類/第三方庫
  • final 方法不可被通知:CGLIB 通過重寫方法織入,final 禁止重寫

4. 只支持方法連接點

不支持字段攔截。Spring 觀點:字段訪問破壞封裝,對象應通過方法交互。

5. 實現 AOP Alliance 接口

保證與其他 AOP 框架互操作性。

下一步

掌握術語與原理後,下一章將實戰配置 Spring AOP:聲明式事務、日志切面、性能監控等常見場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved