<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2010, 2011 Oracle and/or its affiliates. All rights reserved.
-->
<html>
    <head>
        <title>NetBeans IDE 中的标注处理程序支持</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
        <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
        <meta name="keywords" content="NETBEANS, TUTORIAL, GUIDE, USER, DOCUMENTATION">
        <meta name="description" content="A very simple and quick introduction to the NetBeans IDE workflow by walking you through the creation of a
              simple Hello World Java console application." >
</head>

    <body>
<!-- TODO: this tutorial apparently not working: see https://netbeans.org/bugzilla/show_bug.cgi?id=241476 -->
        <h1>NetBeans IDE 中的标注处理程序支持，第二部分：在 IDE 中使用自己的定制标注处理程序 </h1>
        <p><em>编写人：Jesse Glick，编写和维护人：Irina Filippova</em></p>
        <div class="margin-around">
        <div class="feedback-box margin-around float-left" style="margin-right:15px">
        <p><b>目录</b></p>
  
        <ul class="toc">
            <li><a href="annotations.html">简介</a></li>
            <li><a href="annotations.html#map">javac 选项和 IDE 命令的映射</a> </li>
          <li><a href="annotations-lombok.html">使用支持定制标注的 Project Lombok</a></li>
            <li><strong>在 IDE 中使用自己的定制标注处理程序</strong>
              <ul>
                <li><a href="#defineann">定义标注与创建标注处理程序</a></li>
                <li><a href="#useprocessor">使用标注处理程序</a> </li>
              </ul>
            </li>
            <li><a href="#seealso" title="另请参见"><strong>另请参见 </strong></a></li>
        </ul>
		</div>
	</div>
	<img alt="此页上的内容适用于 NetBeans IDE 7.0、7.1、7.2 和 7.3" class="stamp" src="../../../images_www/articles/71/netbeans-stamp-71-72-73.png" title="此页上的内容适用于 NetBeans IDE 7.0、7.1、7.2 和 7.3" />
        <p>在本教程的此部分，您会了解到如何在 IDE 中将自创的定制标注处理程序添加到项目中。本教程的目的并不在于教授如何编写标注处理程序。它解释如何将其添加到 NetBeans IDE 项目中。 </p>
        <p>此部分使用的样例应用程序由 Jesse Glick 创建，并作为早期发行版本的 IDE 的<a href="http://wiki.netbeans.org/FaqApt" target="_blank">常见问题解答条目</a>发布。  </p>
        <p>用作示例的标注处理程序为标注类生成父类。生成的父类还包含从标注类中调用的方法。请按照下面有关如何创建定制标注处理程序并将其添加到 IDE 项目的说明进行操作。 </p>
        <p style="clear:both"><b>要学完本教程，您需要具备以下软件和资源。</b></p>

        <table>
            <tbody>
                <tr>
                    <th class="tblheader" scope="col">软件或资源</th>
                    <th class="tblheader" scope="col">要求的版本</th>
                </tr>
                <tr>
                  <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html" target="_blank">NetBeans IDE</a></td>
                  <td class="tbltd1">7.0, 7.1, 7.2, 7.3</td>
                </tr>
                <tr>
                  <td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 开发工具包 (JDK)</a></td>
                  <td class="tbltd1">版本 6 或 7</td>
                </tr>
                <tr>
                    <td class="tbltd1"><a href="http://code.google.com/p/projectlombok/downloads/list">lombok.jar</a></td>
                    <td class="tbltd1">v1.12.4 或更新版本</td>
                </tr>
            </tbody>
        </table>
        
    <h2><a name="defineann"></a>定义标注与创建标注处理程序</h2>
    <p>在本练习中，将创建类库项目。</p>
    <ol>
        <li>选择 "File"（文件）> "New Project"（新建项目），然后在 "Java" 类别中选择 "Java Class Library"（Java 类库）项目类型。单击 "Next"（下一步）。</li>
        <li>键入 <strong><tt>AnnProcessor</tt></strong> 作为项目名称，并为项目指定位置。单击 "Finish"（完成）。
        <p>单击 "Finish"（完成），此时 IDE 将创建类库项目，并在 "Projects"（项目）窗口中列出该项目。</p>
        </li>
        <li>在 "Projects"（项目）窗口中，右键单击 AnnProcessor 项目节点，然后选择 "Properties"（属性）。</li>
        <li>在 "Sources"（源）类别中，确认将 JDK 6 或 JDK 7 指定为源代码/二进制格式。</li>
        <li>选择 "Libraries"（库）标签，然后确认将 Java 平台设置为 "JDK 1.6" 或 "JDK 1.7"。单击 "OK"（确定），以关闭 "Project Properties"（项目属性）窗口。</li>
    </ol>
    
    <p>在本练习中，将创建两个 Java 包，并在每个包中创建一个 Java 类。</p>
    <ol>
        <li>右键单击 "AnnProcessor" 项目下的 "Source Packages"（源包）节点，然后选择 "New"（新建）> "Java Package"（Java 包）。</li>
        <li>为 "Package Name"（包名）键入 <strong><tt>ann</tt></strong>，然后单击 "Finish"（完成）创建新的 Java 包。</li>
        <li>重复执行前面的两个步骤，以创建一个名为 <strong><tt>proc</tt></strong> 的 Java 包。
            <p>创建了这两个 Java 包后，项目结构应类似于下图。</p>
            <img alt="显示 Java 包的 &quot;Projects&quot;（项目）窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/packages.png" title="标注处理程序项目的结构。"></li>
        <li>右键单击 <tt>ann</tt> Java 包，然后选择 "New"（新建）> "Java Class"（Java 类）。</li>
        <li>键入 <strong><tt>Handleable</tt></strong> 作为类名。单击 "Finish"（完成）。</li>
        <li>修改新的 <tt>Handleable.java</tt> 文件，进行如下更改。保存该文件。
            <pre>package ann;

public <strong>@interface</strong> Handleable {

}</pre>

            <p>这是一种标注声明方式，与接口声明十分类似。区别在于 <tt>at</tt> 符号 (@) 必须置于 <tt>interface</tt> 关键字之前。此标注名为 <tt>Handleable</tt>。</p>

            <p class="notes"><strong>其他信息。</strong>在标注声明中，还可以指定其他参数，例如，可以标注哪些类型的元素（类或方法等）。可以通过为类添加 <tt>@Target(value = {ElementType.TYPE})</tt> 和添加 <tt>@Target(value = {ElementType.METHOD})</tt> 来实现此目的。因此，标注声明使用 <em>meta-annotations</em> 标注自身。 </p>

            <p>现在，您需要为标注处理程序添加处理 <tt>Handleable</tt> 标注的代码。<p>
        </li>
        <li>右键单击 <strong><tt>proc</tt></strong> Java 包，然后选择 "New"（新建）> "Java Class"（Java 类）。</li>
        <li>键入 <strong><tt>HandleableProcessor</tt></strong> 作为类名。单击 "Finish"（完成）。</li>
        <li>修改 <tt>HandleableProcessor.java</tt> 类，以添加如下代码。保存所做的更改。
            <p class="notes"><strong>注：</strong><tt>@SupportedSourceVersion</tt> 的值（<strong>粗体</strong>）将依赖于您正在使用的 JDK 版本，将为 <tt>(SourceVersion.RELEASE_7)</tt> 或 <tt>(SourceVersion.RELEASE_6)</tt>。</p>
            <pre class="examplecode">package proc;

import ann.Handleable;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.tools.Diagnostic;
import javax.tools.JavaFileObject;

@SupportedAnnotationTypes("ann.Handleable")
@SupportedSourceVersion(<strong>SourceVersion.RELEASE_7</strong>)
public class HandleableProcessor extends AbstractProcessor {

    /** public for ServiceLoader */
    public HandleableProcessor() {
    }

    public boolean process(Set&lt;? extends TypeElement&gt; annotations,
            RoundEnvironment roundEnv) {
        for (Element e : roundEnv.getElementsAnnotatedWith(Handleable.class)) {
            if (e.getKind() != ElementKind.FIELD) {
                processingEnv.getMessager().printMessage(
                        Diagnostic.Kind.WARNING,
                        "Not a field", e);
                continue;
            }
            String name = capitalize(e.getSimpleName().toString());
            TypeElement clazz = (TypeElement) e.getEnclosingElement();
            try {
                JavaFileObject f = processingEnv.getFiler().
                        createSourceFile(clazz.getQualifiedName() + "Extras");
                processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
                        "Creating " + f.toUri());
                Writer w = f.openWriter();
                try {
                    PrintWriter pw = new PrintWriter(w);
                    pw.println("package "
                            + clazz.getEnclosingElement().getSimpleName() + ";");
                    pw.println("public abstract class "
                            + clazz.getSimpleName() + "Extras {");
                    pw.println("    protected " + clazz.getSimpleName()
                            + "Extras() {}");
                    TypeMirror type = e.asType();
                    pw.println("    /** Handle something. */");
                    pw.println("    protected final void handle" + name
                            + "(" + type + " value) {");
                    pw.println("        System.out.println(value);");
                    pw.println("    }");
                    pw.println("}");
                    pw.flush();
                } finally {
                    w.close();
                }
            } catch (IOException x) {
                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                        x.toString());
            }
        }
        return true;
    }

    private static String capitalize(String name) {
        char[] c = name.toCharArray();
        c[0] = Character.toUpperCase(c[0]);
        return new String(c);
    }
}</pre>
                <p>让我们详细了解构成标注处理程序代码的主要部分（请注意，为方便起见，我们仅提供了部分代码）。 </p>
                <p>首先，您指定标注处理程序支持的标注类型（通过 <tt>@SupportedAnnotationTypes</tt>）以及支持的源文件版本（通过 <tt>@SupportedSourceVersion</tt>）；在本示例中，版本为 JDK 6： <br>
                <pre class="examplecode">
@SupportedAnnotationTypes("ann.Handleable")
@SupportedSourceVersion(SourceVersion.RELEASE_6)</pre>
                 <p>然后，为处理程序声明一个公共类，以扩展 <tt>javax.annotation.processing</tt> 包中的 <tt>AbstractProcessor</tt> 类。<tt>AbstractProcessor</tt> 是具体标注处理程序的标准超类，它包含处理标注所需的方法。</p>
                 <pre class="examplecode">public class HandleableProcessor extends AbstractProcessor {
...
}</pre>
                 <p>现在，您需要为该类提供一个公共构造函数。</p>
                 <pre class="examplecode">public class HandleableProcessor extends AbstractProcessor {
<strong>    public HandleableProcessor() {
    }</strong>
...

}</pre>
                 <p>然后，调用父 <tt>AbstractProcessor</tt> 类的 <tt>process()</tt> 方法。通过此方法，提供可用于处理的标注。此外，此方法包含有关处理舍入的信息。</p>
                
            <pre class="examplecode">public class HandleableProcessor extends AbstractProcessor {<strong>
   </strong>...
<strong>     public boolean process(Set&lt;? extends TypeElement&gt; annotations,
            RoundEnvironment roundEnv) {
     ...
     }
</strong>
}</pre>
                 <p>标注处理程序的逻辑包含在 <tt>AbstractProcessor</tt> 类的 <tt>process()</tt> 方法中。注：通过 <tt>AbstractProcessor</tt>，还可以访问 <tt>ProcessingEnvironment</tt> 接口，该接口允许标注处理程序使用多个有用的工具，如 Filer（使标注处理程序可以创建新文件的 Filer 处理程序）和 Messager（标注处理程序报告错误的一种方式）。</p>
                 <pre class="examplecode">public class HandleableProcessor extends AbstractProcessor {<strong>
   </strong>...
     public boolean process(Set&lt;? extends TypeElement&gt; annotations,
            RoundEnvironment roundEnv) {<br>
            //For each element annotated with the Handleable annotation
            <strong>for (Element e : roundEnv.getElementsAnnotatedWith(Handleable.class)) {
<br>            </strong>//Check if the type of the annotated element is not a field. If yes, return a warning<strong>.<br>            if (e.getKind() != ElementKind.FIELD) {<br>                processingEnv.getMessager().printMessage(<br>                        Diagnostic.Kind.WARNING,<br>                        &quot;Not a field&quot;, e);<br>                continue;<br>            }
            </strong>//Define the following variables: name and clazz<strong>.</strong><strong><br>            String name = capitalize(e.getSimpleName().toString());<br>            TypeElement clazz = (TypeElement) e.getEnclosingElement();<br>            </strong>//Generate a source file with a specified class name. <strong>
            try {<br>                JavaFileObject f = processingEnv.getFiler().<br>                        createSourceFile(clazz.getQualifiedName() + &quot;Extras&quot;);<br>                processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,<br>                        &quot;Creating &quot; + f.toUri());<br>                Writer w = f.openWriter();<br>                    </strong>//Add the content to the newly generated file<strong>.
                    try {<br>                    PrintWriter pw = new PrintWriter(w);<br>                    pw.println(&quot;package &quot;<br>                            + clazz.getEnclosingElement().getSimpleName() + &quot;;&quot;);<br>                    pw.println(&quot;public abstract class &quot;<br>                            + clazz.getSimpleName() + &quot;Extras {&quot;);<br>                    pw.println(&quot;    protected &quot; + clazz.getSimpleName()<br>                            + &quot;Extras() {}&quot;);<br>                    TypeMirror type = e.asType();<br>                    pw.println(&quot;    /** Handle something. */&quot;);<br>                    pw.println(&quot;    protected final void handle&quot; + name<br>                            + &quot;(&quot; + type + &quot; value) {&quot;);<br>                    pw.println(&quot;        System.out.println(value);&quot;);<br>                    pw.println(&quot;    }&quot;);<br>                    pw.println(&quot;}&quot;);<br>                    pw.flush();<br>                } finally {<br>                    w.close();<br>                }<br>            } catch (IOException x) {<br>                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,<br>                        x.toString());<br>            }<br>        }</strong><br>        return true;
    <strong> }</strong>
...
}</pre>
                 <p>此代码的最后一段代码块声明了 <tt>capitalize</tt> 方法，该方法用于大写标注的元素的名称。</p>
             <pre class="examplecode">public class HandleableProcessor extends AbstractProcessor {<strong>
   </strong>...<strong>

  private static String capitalize(String name) {<br>        char[] c = name.toCharArray();<br>        c[0] = Character.toUpperCase(c[0]);<br>        return new String(c);<br>    }
</strong>}</pre>
            </li>
            <li>右键单击 <tt>AnnProcessor</tt> 项目，然后选择 "Build"（构建）以构建项目。</li>
        </ol>

    
        <h2><a name="useprocessor"></a>在 IDE 中使用标注处理程序</h2>
        <p>在本部分中，将创建一个 Java 应用程序项目，以便在其中使用标注处理程序。</p>
        <ol>
            <li>选择 "File"（文件）> "New Project"（新建项目），然后在 "Java" 类别中选择 "Java Application"（Java 应用程序）项目类型。单击 "Next"（下一步）。</li>
            <li>在 "Name and Location"（名称和位置）页中，键入 <strong><tt>Demo</tt></strong> 作为项目名称，并指定项目位置。</li>
            <li>在 "Create Main Class"（创建主类）字段中，键入 <strong><tt>demo.Main</tt></strong>。单击 "Finish"（完成）。<br> <img alt="新建项目向导的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-project-wizard.png" title="在新建项目向导中创建 &quot;Demo&quot;（演示）项目。"></li>

            <li>打开 "Project Properties"（项目属性）窗口，确认在 "Sources"（源）面板中选择 "JDK 6" 或 "JDK 7" 作为源代码/二进制格式，然后确认在 "Libraries"（库）面板中将 Java 平台设置为 "JDK 1.6" 或 "JDK 1.7"。</li>
            <li>修改 <tt>Main.java</tt> 类，以添加如下代码。保存所做的更改。
                <pre class="examplecode">package demo;

<strong>import ann.Handleable;</strong>

public class Main <strong>extends MainExtras</strong> {

    <strong>@Handleable
    private String stuff;</strong>

    <strong>public static void main(String[] args) {
        new Main().handleStuff("hello");
    }</strong>
}</pre>
                <p>此代码包含以下元素：</p>
                <ul>
                    <li>定制标注处理程序 <tt>ann.Handleable</tt> 的 import 语句</li>
                    <li>扩展 <tt>MainExtras</tt> 类（<tt>MainExtras</tt> 应由标注处理程序在编译期间生成）的公共类 <tt>Main</tt></li>
                    <li>一个名为 <tt>stuff</tt> 的私有字段，它使用 <tt>@Handleable</tt> 标注进行标注 </li>
                    <li>调用 <tt>handleStuff</tt> 方法的 <tt>main</tt> 方法，后者在自动生成的 <tt>MainExtras</tt> 类中声明
                        
                        <p>在这个简单示例中，<tt>handleStuff</tt> 方法仅输出当前值。可以修改此方法以执行其他任务。</p></li>
                </ul>
                <p>保存 <tt>Main.java</tt> 代码后，您会看到 IDE 报告多个编译错误。这是由于标注处理程序尚未添加到项目中。</p>
            </li>
            <li>在 "Projects"（项目）窗口中，右键单击 <tt>Demo</tt> 项目节点，选择 "Properties"（属性），然后在 "Project Properties"（项目属性）窗口中选择 "Libraries"（库）类别。</li>
            <li>在 "Compile"（编译）标签中，单击 "Add Project"（添加项目），然后找到 <tt>AnnProcessor</tt> 项目。<br> <img alt="项目的 &quot;Properties&quot;（属性）窗口 &quot;Libraries&quot;（库）类别中的 &quot;Compile&quot;（编译）标签的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-properties-compile.png" title="项目的 &quot;Properties&quot;（属性）窗口 &quot;Libraries&quot;（库）类别中的 &quot;Compile&quot;（编译）标签">
                
                <p>"Compile"（编译）标签对应于 <a href="http://download.oracle.com/javase/6/docs/technotes/tools/windows/javac.html#options" target="_blank">Java 编译器</a>的 <tt>-classpath</tt> 选项。由于标注处理程序是包含标注定义和标注处理程序的单一 JAR 文件，因此，应在 "Compile"（编译）标签中将其添加到项目的类路径中。</p>
            </li>
            <li>在 "Project Properties"（项目属性）窗口中选择 "Compiling"（编译）类别，然后选中 "Enable Annotation Processing"（启用标注处理）和 "Enable Annotation Processing in Editor"（在编辑器中启用标注处理）复选框。</li>
            <li>单击 "Annotation Processors"（标注处理程序）文本区域旁边的 "Add"（添加）按钮，然后在 "Annotation Processor FQN"（标注处理程序 FQN）字段中键入 <strong><tt>proc.HandleableProcessor</tt></strong> 以指定要运行的标注处理程序。<br> <img alt="&quot;Annotation Processor FQN&quot;（标注处理程序 FQN）对话框的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-processor-fqn.png" title="&quot;Annotation Processor FQN&quot;（标注处理程序 FQN）对话框">
                
                <p>"Project Properties"（项目属性）窗口中的 "Compiling"（编译）类别应如下图所示。</p>
                <img alt="项目 &quot;Properties&quot;（属性）窗口中的 &quot;Compiling&quot;（编译）类别的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-properties-compiling.png" title="项目 &quot;Properties&quot;（项目属性）窗口中的 &quot;Compiling&quot;（编译）类别">
                
            </li>
            <li>在 "Properties"（属性）窗口中单击 "OK"（确定）。
        
                <p class="notes"><strong>注：</strong>在 <tt>Main.java</tt> 文件中，仍可能会看到一些编译错误。这是由于 IDE 仍然找不到声明 <tt>handleStuff</tt> 方法的 <tt>MainExtras.java</tt> 文件。首次构建 Demo 项目后，将构建 <tt>MainExtras.java</tt> 文件。如果为项目启用了 "Compile On Save"（在保存时编译）功能，则在保存 <tt>Main.java</tt> 时，IDE 将编译项目。</p>
            </li>
            <li>右键单击 "Demo" 项目，然后选择 "Build"（构建）。
            <p>在构建项目后，如果在 "Projects"（项目）窗口中查看该项目，则可以看到包含 <tt>demo/MainExtras.java</tt> 文件的新 <tt>Generated Sources</tt>（构建的源文件）节点。</p>
            <img alt="带有 &quot;Generated Sources&quot;（生成的源文件）的 &quot;Projects&quot;（项目）窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-generated-sources.png" title="带有 &quot;Generated Sources&quot;（生成的源文件）的 &quot;Projects&quot;（项目）窗口">

            <p>如果您查看生成的 <tt>MainExtras.java</tt> 文件内容，则可以看到标注处理程序生成了包含 <tt>handleStuff</tt> 方法的 <tt>MainExtras</tt> 类。<tt>handleStuff</tt> 方法是通过标注的 <tt>Main.java</tt> 文件调用的。 </p>
                <pre class="examplecode">package demo;
public abstract class MainExtras {
    protected MainExtras() {}
    /** Handle something. */
    protected final void handleStuff(java.lang.String value) {
        System.out.println(value);
    }
}</pre>
            </li>
            <li>右键单击 "Demo" 项目，然后选择 "Run"（运行）。
                <p>单击 "Run"（运行）时，"Output"（输出）窗口中应显示以下内容。Demo 项目编译并打印该信息。</p>
            <img alt="带有 &quot;Generated Sources&quot;（生成的源文件）的 &quot;Projects&quot;（项目）窗口的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/annotations/demo-run.png" title="带有 &quot;Generated Sources&quot;（生成的源文件）的 &quot;Projects&quot;（项目）窗口">
          </ol>
          <div class="feedback-box"><a href="/about/contact_form.html?to=3&subject=Feedback:%20Using%20the%20Annotation%20Processors%20Support%20in%20NetBeans%20IDE">发送有关此教程的反馈意见</a><br style="clear:both;" />
        </div>
        <h2><a id="seealso" name="seealso"></a>另请参见</h2>
        <p>有关 Java 应用程序中标注的详细信息，请参见以下资源：</p>
        <ul>
          <li>Java SE 文档 - <a href="http://download.oracle.com/javase/6/docs/technotes/guides/language/annotations.html" target="_blank">标注</a></li>
          <li>Java SE 教程 - <a href="http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html" target="_blank">标注</a> </li>
          <li><a href="http://download.oracle.com/javase/6/docs/technotes/tools/windows/javac.html#processing" target="_blank">Java 编译器：标注处理选项</a> </li>
          <li><a href="http://blogs.oracle.com/darcy/">Joseph D. Darcy 的博客</a> - 来自 JSR-269 规范负责人的有用提示 </li>
    </ul>
</body>
</html>
