运行时利用反射获取注解

  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获取相应方法的注解,然后注解中描述业务操作信息,但是因为在业务层中添加注解的话,一个业务操作可能涉及多个表的信息,无法准确知道具体的变化的信息,而且还无法判断事务是否一定完成。关于业务日志的还没有好的解决方案。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值