java Annotation

关于java的Annotation是如何被利用上的,之前一直有些迷惑,今天算是弄懂了,如果有理解不当之处,希望大家指教批评!
我的理解:我们自己写了一个Annotation,定义了其属性(其实就是一个个的方法,属性名就是方法名),@Target和@Retention等元Annotation也都设定好了,那么这个自定义的Annotation是如何为我们的业务代码服务的呢?一定要写一个这个Annotation的处理器(名字听上去好像挺高大上似的,其实一个方法就可以搞定,感觉业界中很多时候都是把名字弄得很响亮,其实说白了都没什么),这个处理器读取这个Annotation的属性(利用反射机制),再根据属性来判断我们要做的操作,完成相应的逻辑。
          
          下面是我写的一段代码,是控制是否打印的一个Annotation,很简单,但自认为可以说明问题

          自定义的Annotation:
          import java.lang.annotation.ElementType;
          import java.lang.annotation.Retention;
          import java.lang.annotation.RetentionPolicy;
          import java.lang.annotation.Target;

          @Target(ElementType.METHOD)
          @Retention(RetentionPolicy.RUNTIME)
          public @interface MyAnnotation {
              boolean isPrint() default true;
          }


          客户端:
          import java.lang.reflect.InvocationTargetException;
          import java.lang.reflect.Method;

          public class test {
              private static int id = 0;
              public static void main(String[] args) {
                  test t = new test();
                  try {
                      action(t);
                  } catch (InvocationTargetException e) {
                      e.printStackTrace();
                  } catch (IllegalAccessException e) {
                      e.printStackTrace();
                  }
              }

              @MyAnnotation(isPrint = true)
              public static void temp() {
                  System.out.println("我被打印啦!!!");
              }
            
            处理Annotation的方法(处理器)
              public static void action(Object obj)
                      throws InvocationTargetException, IllegalAccessException {
                  Method[] methods = obj.getClass().getDeclaredMethods();
                  for (Method mt : methods) {
                      MyAnnotation myAnnotation = mt.getAnnotation(MyAnnotation.class);
                      boolean result = false;
                      if (null != myAnnotation) {
                          result = myAnnotation.isPrint();
                      }
                      if (result) {
                          // 执行打印
                          mt.invoke(obj);
                      }
                  }
              }
          }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值