AspectJ Development Tools (AJDT) 近期經歷重大變革,與 Eclipse 平台實現深度整合。本文介紹適用於 Eclipse 3.0 的 AJDT 1.2(6 月釋出)與適用於 Eclipse 3.1 的 AJDT 1.3(9 月穩定版,現可下載早期構建),幫助新舊開發者快速掌握新功能與遷移要點。
在 Eclipse 中建立 AspectJ 專案與 Java 專案幾乎相同:File > New > Project > AspectJ Project。本質上,AspectJ 專案就是擁有 AspectJ 性質的 Java 專案,編譯器由 AspectJ 編譯器(JDT 編譯器擴展)取代 JDT Java 編譯器,完全相容 Java 代碼。
透過 File > New > Other > AspectJ > Aspect 建立方面,檔案副檔名為 .aj。AspectJ 編輯器提供熟悉的體驗:大綱視圖即時更新、語法錯誤紅線標示、組織匯入、重疊顯示、重新格式化、內容輔助(Ctrl+Space)等。雖然切入點名稱的內容輔助與快速修復尚待未來版本完善,但核心編輯體驗已極為成熟。
AJDT 提供兩大核心機制呈現橫切關係:
與 Outline 視圖互補:Outline 顯示當前文件結構,Cross References 顯示當前元素的橫切關係。建議佈局將 Cross References 放在 Outline 下方。點擊編輯器中的方法,視圖即顯示該方法被哪些通知影響;點擊通知可直接導航至源碼。支援「不連結編輯器選擇」與「顯示整個文件橫切資訊」選項。

Ctrl+O 開啟 Quick Outline,Ctrl+Alt+X 開啟 Quick Cross References,節省螢幕空間。編輯器左側標記圖示指示通知類型(before/after/around)與是否含運行時測試(問號變體)。右鍵標記可導航至通知源碼,通知端亦有對稱的 Advises 選單,實現雙向導航。圖像裝飾器(橙色箭頭)在 Outline、Cross References、Members 視圖中統一顯示受影響元素。

右鍵專案選擇 Convert to AspectJ Project 即可無縫轉換,過程可逆。AspectJ 編譯分兩階段:編譯源碼生成 .class、編織方面應用至類別。為控制編織範圍,專案屬性新增兩項設定:
bin 目錄)在消費者專案的 AspectJ Aspect Path 加入提供者專案的 bin 目錄。編輯器標記與 Cross References 仍顯示關係,但來源顯示為二進制方面(無法導航源碼)。運行時需將 aspectpath 加入類路徑,AJDT 提供 Run > AspectJ/Java Application 啟動配置自動處理。
建立 AspectJ 專案,在 InPath 引用 Java 專案的 JAR 或類別目錄。啟用編譯器選項 Output weaving info messages to problems view,Problems 視圖將顯示編織資訊。可用 Output JAR 選項直接輸出編織後的 JAR。
將抽象方面(含抽象切入點)隔離為獨立專案形成庫。消費者專案在 Java Build Path 加入庫專案,具體切入點在本地實作。編輯器標記顯示通知來源為抽象超類,未來版本將支援「使用切入點」導航至具體實作。
插件專案同樣可轉換為 AspectJ 專案,系統提示加入 org.aspectj.runtime 依賴。PDE 的 Create Ant Build File with AspectJ Support 生成使用 iajc 任務的 build.xml。
切換至 Aspect Visualization 視圖,以柱狀圖呈現專案橫切分佈:每欄代表一源文件,高度對應行數,色帶標示通知作用位置,顏色對應方面。支援縮放、過濾受影響欄、切換類別/套件視圖、自訂顏色。記憶體優化確保大型專案可用。

新功能 Crosscutting Comparison(AJDT 1.2.1/1.3 引入)允許對專案橫切關係建立快照(.ajmap),隨後與新版本比較。右鍵專案選擇 AspectJ Tools > Save Crosscutting Map 建立快照,再選擇一或兩個圖文件比較。結果視圖顯示新增/刪除的關係,支援雙擊導航、過濾、排序。若與當前建構比較,每次建構自動刷新,重構時極具價值。

-vmargs -Xmx512m多數 AspectJ 5 功能需 Eclipse 3.1(Java 5 支援),故僅 AJDT 1.3 支援。專案設定 Java > Compiler > Compiler compliance level = 5.0 並確保 JRE 為 Java 5。
declare @method 等新橫切關係 annotates/annotated by 顯示於 Cross References 與標記選單

升級後首次啟動 Eclipse 會啟動遷移精靈:
.aj),可排除專案org.aspectj.ajde 改為 org.aspectj.runtime
團隊以 AspectJ/AJDT 開發 AJDT(約 20 萬行代碼,多個啟用 AspectJ 的插件),實戰驗證並修復大量問題。方面用於:異常捕獲與錯誤日誌、效能監控視圖、編碼標準強制、屬性頁變更追蹤、ISafeRunnable 包裝調用。未來方面將成為新功能設計的核心部分。
AJDT 1.2/1.3 實現了編輯器體驗重構(方面用 AspectJ 編輯器,類別用標準 Java 編輯器)、標準 Outline 增強支援方面、無縫整合消除全域設定修改、導出 JAR/轉換副檔名/建構檔案新支援、遞增編譯預設開啟、Visualiser 處理大型專案更靈活、文檔全面更新。未來方向:Eclipse Java 工具擴展性增強、面向切面重構、方面庫支援強化、解決「資訊過載」(過量橫切標記)。歡迎透過 Bugzilla、新聞組、郵件列表參與貢獻。