在运行时通过反射找到被注释的方法

元数据会给源代码添加一些辅助信息。这个辅助信息叫注释,annotation,它不会改变程序的运行。这种元数据可以为其它一些工具所使用,比如代码生成器,使其能够在运行的时候生成附加代码。依赖注入框架,像Spring,也会用到注释。注释可以附着在类或方法上。关键字interface前面加上@就能创建注释了。

package org.kodejava.example.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface HelloAnno {
    String value();
    String greetTo();
}
package org.kodejava.example.annotation;

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

@HelloAnno(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());
        }

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

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

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

        demo.sayHello();
    }

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

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

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

原文: http://www.kodejava.org/examples/501.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值