`

运行时利用反射获取注解

阅读更多

  1. 对Class、Method、Field以及Constructor对象调用getAnnotation()方法,可以获得与对象关联的特定信息。该方法的一般形式如下:
<A extends Annotation> getAnnotation(Class<A> annoType)
其中,annoType是表示您感兴趣注解的Class对象。该方法返回对注解的一个引用,使用这个引用可以获取与注解成员关联的值。如果没有找到注解,该方法会返回null。如果注解的保留策略不是RUNTIME,就会出现这种情况。

自定义一个注解(需要注意的是注解的保留策略)

import java.lang.annotation.*;
import java.lang.reflect.*;
 
// An annotation type declaration.
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno {
  String str();
  int val();
}

 自定义一个类Meta(注意获取注解成员属性的方法)

class Meta {
 
  // myMeth now has two arguments.
  @MyAnno(str = "Two Parameters", val = 19)
  public static void myMeth(String str, int i)
  {
    Meta ob = new Meta();
 
    try {
      Class<?> c = ob.getClass();
 
      // Here, the parameter types are specified.
      Method m = c.getMethod("myMeth", String.class, int.class);
 
      MyAnno anno = m.getAnnotation(MyAnno.class);
 
      System.out.println(anno.str() + " " + anno.val());
    } catch (NoSuchMethodException exc) {
       System.out.println("Method Not Found.");
    }
  }
 
  public static void main(String args[]) {
    myMeth("test", 10);

  }
}

 

2. 获取所有注解

可以获取与某个条目关联的具有RUNTIME保留策略的所有注解,具体方法是为该条目调用getAnnotations()方法。该方法的一般形式如下:
 
Annotation[ ] getAnnotations( )
 
上述方法返回一个注解数组。

 

 

这里说明下,因为想要获取业务日志,所以当初的想法是利用AOP获取相应方法的注解,然后注解中描述业务操作信息,但是因为在业务层中添加注解的话,一个业务操作可能涉及多个表的信息,无法准确知道具体的变化的信息,而且还无法判断事务是否一定完成。关于业务日志的还没有好的解决方案。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics