註解處理器示例
來自《Java編程思想(第4版)》
- 用例跟蹤
- 數據庫表生成
- Java 代碼生成
用例跟蹤使用註解來描述用例的完成情況。
1. 定義描述用例(完成情況)的註解 UseCase
2. 定義用例類PasswordUtil
並註解
3. 定義註解處理器UseCaseTracker
執行方式:Main方法,通過反射獲取註解的類/類成員的信息。
數據庫表生成使用註解描述數據庫表。
1. 定義描述數據庫表的註解
1. 描述數據庫表 DBTable
2. 描述數據庫約束 Constraints
3. 描述數據庫字段類型 SQLString
2. 定義實體類Member
並註解
3. 定義註解處理器TableCreator
執行方式:Main方法,通過反射獲取註解的類/類成員的信息。
Java 代碼生成示例將類提取爲接口(提取 public 方法)。
1. 定義描述接口的註解InterfaceExtractor
2. 定義待提取類Multiplier
並註解
3. 定義註解處理器InterfaceExtractorProcessor
4. 定義註解處理器工廠類InterfaceExtractorProcessorFactory
執行方式:apt 掃描註解並查找對應的註解處理器,註解處理器要通過註解處理器工廠註冊給 apt,apt 提供執行環境給處理器訪問環境資源。內部原理不明(因爲沒有執行編譯被註解的類,所以不是通過反射進行的處理)。
API 支持
- apt + com.sun.mirror API:JDK 5 引入註解,同時配備該API進行註解處理; JDK 7 中不再支持。
- javac + javax.annotation.processing API:JDK 6 對註解處理進行了標準化,apt 工具被集成到 javac,原先的 API(tools.jar,不屬於 Java 標準API)也被標準化。
IDE 對註解處理的支持
eclipse
支持註解處理,但是對註解處理器的調試僅能通過將項目作爲插件的形式進行。Android Studio
默認不支持,需要引入外部依賴進行。