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

冒號課堂 §3.3:切面導向編程(AOP)——多角度看問題

     編輯:Java 相關知識

緣起:SoC 與 DRY

  • SoC(關注點分離):將系統分解為獨立、單一職責的模組。
  • DRY(不要重複自己):提取公共邏輯,避免疊床架屋。

傳統模組化(過程、物件、函數)沿縱向分解,但橫切關注點(Logging、Transaction、Security、Exception Handling 等)橫跨多模組,以碎片形式散落,難以提煉。

AOP 核心術語

術語說明中文建議
Aspect封裝橫切關注點的模組切面
Join Point程式執行中可插入切面的具體點(方法調用、欄位存取、異常拋出等)接入點
Pointcut符合條件的 Join Point 集合(如 "所有以 set 開頭的方法")切入點
Advice在 Pointcut 定義的位置執行的代碼邏輯建議
Weaving將 Advice 嵌入主程式的過程編織

譯名正名:Advice 譯「建議」而非「通知」;Join Point 譯「接入點」而非「連接點」。

AOP 與 OOP 關係

  • OOP:沿繼承樹縱向重用。
  • AOP:沿橫切關注點橫向重用。
  • 結論:AOP 是 OOP 的補充,非分支、非超越;且不限於 OOP(可用於過程式、函數式語言)。

編織機制

  1. 靜態編織:編譯期、後編譯期、載入期修改原始碼/位元碼(AspectJ、AspectC++)。
  2. 動態編織:執行期透過 Proxy 動態攔截(Spring AOP、JBoss AOP、AspectWerkz)。

工具支援元編程與產生式編程技術。

光學類比:三稜鏡模型

AOP 三稜鏡模型

  • 白光 = 複雜系統。
  • 第一個三稜鏡 = 關注點分離器 → 分解為單色光(切面)。
  • 第二個三稜鏡 = 編織器 → 重組為白光(完整系統)。

實施三步驟:切面分解 → 切面實作 → 切面合成。開發者專注於編寫 Advice 與定義 Pointcut。

閱讀原文文獻的重要性

  • 術語翻譯常失真(如 Advice→通知),誤導理解。
  • 譯本滯後、質量參差;原文最新、最準確。
  • 英語是程式設計師的必修「程式語言」。

適用場景與代價

  • 適用:大中型系統、企業級應用(事務、安全、日誌、效能監控)。
  • 代價:增加複雜度、微小效能損耗;小型專案屬過度設計。

課後練習

  • 在專案中識別 3 個橫切關注點,嘗試用 AspectJ/Spring AOP 重構。
  • 對比 Spring AOP(動態代理)與 AspectJ(靜態編織)的優劣與適用邊界。
  • 閱讀《AspectJ in Action》原文版深化理解。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved