面向切面程式設計(AOP)在 Java 平台已成主流,但面對 AspectJ、AspectWerkz、JBoss AOP、Spring AOP 四大成熟工具,專案該如何抉擇?本文為兩部分系列之第一部分,聚焦於各工具的核心語言機制——連接點模型、切入點、通知、型別間宣告——以及三種截然不同的語法風格(程式碼風格、註解風格、XML 風格)對開發體驗與語義的影響。第二部分將續探開發環境整合、建置、IDE 與效能。
依據 aosd.net 2004 年 11 月用戶郵件列表貼文量統計,這四款工具擁有最大活躍社群,皆為開源且達商用成熟度:

所有 AOP 工具皆建立在連接點模型之上:

切入點為選取連接點集合的宣告式機制,支援通配符、型別模式、控制流程、組合(&&、||、!)與命名/抽象化;通知定義在匹配連接點執行的動作;型別間宣告讓切面為既有型別新增欄位/方法/介面實作。三者構成切面的三大核心成員。
以「對 banking.Account 所有公共方法執行認證」為例,展示四工具差異:

aspect、pointcut、before 等)this(account))提供靜態型別化的連接點上下文存取ajc,支援增量編譯、.lst 包含清單配置

jboss-aop.xml),亦支援註解風格
advisor、攔截器、切入點模式)
AspectJ 程式碼風格最簡潔:切入點為一級實體,支援 import、型別模式(Account+ 代表所有子型別),通知無需顯式命名與綁定。XML/註解風格需在 Java 與外部描述間切換,切入點為字串,易拼錯且難重構。
唯有 AspectJ 提供切入點完整靜態型別檢查。其他工具僅能檢查 XML/註解語法良構性,無法驗證切入點中型別名稱、方法簽名是否存在,導致執行期靜默失效,除錯極耗時。
XML 風格將切面應用配置(哪些切面啟用、切入點綁定)外部化,利於部署階段調整;AspectJ 需透過編譯期包含清單控制。註解風格介於兩者間。
儘管語法迥異,四工具核心 AOP 語義高度聚合:連接點模型、切入點匹配/組合、通知語義、實例化模型、擴展性機制。以下為關鍵差異點:

AspectJ 支援 before/after/after-returning/after-throwing/around 五種;JBoss AOP 僅支援 around(通過 invocation.invokeNext() 繼續),簡單但犧牲簡潔度;Spring AOP 透過攔截器鏈實現類 around 語義。
AspectJ/AspectWerkz:切入點參數綁定,提供靜態型別化上下文(如 Account account)。JBoss/Spring:反射式存取,失去編譯期型別安全。
皆支援 per 子句控制(per JVM、per 目標物件、per 控制流等)。AspectJ 支援 per 控制流,AspectWerkz 支援 per 執行緒,JBoss 支援 per 連接點。
AspectJ 採抽象切面+抽象切入點機制(類似 Template Method);AspectWerkz/JBoss 採 XML/註解重新綁定通知,無需建立子切面,擴展既有切面至新系統更輕量。
第一部分確立:四工具核心機制同源,語法風格決定開發體驗與工具鏈相容性。第二部分將深入比較建置整合、織入效能、IDE 視覺化導航、文件與庫生態,並解讀 AspectJ/AspectWerkz 合併帶來的 @AspectJ 新風格。選型關鍵在於:專案能否接受語言擴展?是否需要細粒度切面?團隊偏好程式碼還是宣告式配置?現有技術棧為何?