日期:2014-05-20  浏览次数:20702 次

如何获取一个方法上面声名的Annotation名字
比如我有以下的一个方法

@Overwrite
public String toString() {
  return "";
}

我现在想要做的事情是如何能获取到"Overwrite"这个值.纠结很久了.希望大哥们帮帮小弟.
因为现在做的项目日本那面把数据库事务开关.封装成了一个Annotation .要开事务的时候
只要在方法上加一个注解就可以了.我想知道他怎么实现的.

------解决方案--------------------
Overwrite这类的注解是没办法获取的,因为他不是@Retention(RetentionPolicy.RUNTIME)的,所以在运行期间是没办法获取到的。但是如果注解是@Retention(RetentionPolicy.RUNTIME)的,那么就可以获取到。代码如下:

Java code

public static void main(String[] args)throws Exception {
        Class c = Class.forName("test.T");
        Method method = c.getDeclaredMethod("say", new Class[]{});
        Annotation[] as = method.getAnnotations();
        for(Annotation a : as){
            System.out.println(a.annotationType().getSimpleName());
        }
    }

------解决方案--------------------
一个系统是没有办法解释自身的,必须借助外面的系统来描述自身,也就是说任何一个系统都不是完备的, 如果它完备,它就是自相矛盾的。