Java註解處理器使用詳解

在這篇文章中,我將闡述怎樣寫一個註解處理器(Annotation Processor)。在這篇教程中,首先,我將向您解釋什麼是註解器,你可以利用這個強大的工具做什麼以及不能做什麼;然後,我將一步一步實現一個簡單的註解器。

一些基本概念


在開始之前,我們首先申明一個非常重要的問題:我們並不討論那些在運行時(Runtime)通過反射機制運行處理的註解,而是討論在編譯時(Compile time)處理的註解。

註解處理器是一個在javac中的,用來編譯時掃描和處理的註解的工具。你可以爲特定的註解,註冊你自己的註解處理器。到這裏,我假設你已經知道什麼是註解,並且知道怎麼申明的一個註解類型。如果你不熟悉註解,你可以在這官方文檔中得到更多信息。註解處理器在Java 5開始就有了,但是從Java 6(2006年12月發佈)開始纔有可用的API。過了一些時間,Java世界才意識到註解處理器的強大作用,所以它到最近幾年才流行起來。

一個註解的註解處理器,以Java代碼(或者編譯過的字節碼)作爲輸入,生成文件(通常是.java文件)作爲輸出。這具體的含義什麼呢?你可以生成Java代碼!這些生成的Java代碼是在生成的.java文件中,所以你不能修改已經存在的Java類,例如向已有的類中添加方法。這些生成的Java文件,會同其他普通的手動編寫的Java源代碼一樣被javac編譯。

虛處理器 AbstractProcessor


我們首先看一下處理器的API。每一個處理器都是繼承於AbstractProcessor,如下所示:

package com.example;

public class MyProcessor extends AbstractProcessor {

    @Override
    public synchronized void init(ProcessingEnvironment env){ }

    @Override
    public boolean process(Set<? extends TypeElement> annoations, RoundEnvironment env) { }

    @Override
    public Set<String> getSupportedAnnotationTypes() { }

    @Override
    public SourceVersion getSupportedSourceVersion() { }

}
  • init(ProcessingEnvironment env):
    每一個註解處理器類都必須有一個空的構造函數。然而,這裏有一個特殊的init()方法,它會被註解處理工具調用,並輸入ProcessingEnviroment參數。ProcessingEnviroment提供很多有用的工具類Elements,
    Types和Filer。後面我們將看到詳細的內容。
  • process(Set
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章