Java如何在运行时使用反射获取注解?

本示例演示如何获取类和方法的注解。我们使用反射API来获取类和方法信息,从中我们可以读取有关附加到该类或方法的注解的信息。

package org.nhooo.example.lang.annotation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

@HelloAnnotation(value = "Hello", greetTo = "Universe")
public class GettingAnnotation {
    public static void main(String[] args) {
        GettingAnnotation demo = new GettingAnnotation();

        Class clazz = demo.getClass();
        Annotation[] annotations = clazz.getAnnotations();
        for (Annotation anno : annotations) {
            System.out.println("Annotation Type: " + anno.annotationType());
        }

        HelloAnnotation anno = (HelloAnnotation) clazz.getAnnotation(HelloAnnotation.class);
        System.out.println("Anno Value  : " + anno.value());
        System.out.println("Anno GreetTo: " + anno.greetTo());

        try {
            Method m = clazz.getMethod("sayHi");

            anno = m.getAnnotation(HelloAnnotation.class);
            System.out.println("Anno Value  : " + anno.value());
            System.out.println("Anno GreetTo: " + anno.greetTo());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }

        demo.sayHello();
    }

    @HelloAnnotation(value = "Hi", greetTo = "Alice")
    public void sayHi() {
    }

    @HelloAnnotation(value = "Hello", greetTo = "Bob")
    public void sayHello() {
        try {
            Method m = getClass().getMethod("sayHello");
            HelloAnnotation anno = m.getAnnotation(HelloAnnotation.class);

            System.out.println(anno.value() + " " + anno.greetTo());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

您可以HelloAnnotation在下面的示例中找到上面使用的注解:如何创建简单的注解?

我们程序的结果是:

Annotation Type: interface org.nhooo.example.lang.annotation.HelloAnnotation
Anno Value  : Hello
Anno GreetTo: Universe
Anno Value  : Hi
Anno GreetTo: Alice
Hello Bob