zoukankan      html  css  js  c++  java
  • JAVA中注解的使用


    自定义注解,该注解用来描述,方法运行所需的时间上限
    用long类型的数据表示时间,单位为ms;
    然后,自定义注解处理器,运行加了运行时间上限注解的方法,判断方法的运行时间,是否超出了注解中规定的时间上限,如果超过,则返回true,未超过返回false

     1 package annotation;
     2 
     3 import java.lang.reflect.InvocationTargetException;
     4 import java.lang.reflect.Method;
     5 
     6 public class Work {
     7     public static void main(String args[]) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
     8 
     9         //第一步,拿到目标方法的运行的时间上限
    10         Class testTimeLimitClass = TestTimeLimit.class;
    11         //第二步,利用Class对象,获取目标方法Method对象
    12         Method reflectMethodRun = testTimeLimitClass.getDeclaredMethod("run");
    13         //第三步,从Method对象上,判断方法上有没有目标类型注解, 如果有,获取该注解实例(利用isAnnotationPresent 方法)
    14         if(reflectMethodRun.isAnnotationPresent(RunTimeLimit.class)){
    15             //从注解实例上,获取方法运行的时间上限值(getAnnotation 方法获取)
    16             RunTimeLimit runTimeLimit = reflectMethodRun.getAnnotation(RunTimeLimit.class);
    17             long  value = runTimeLimit.value();
    18 
    19             //第四步,运行目标方法,计算方法的实际运行时间
    20             reflectMethodRun.setAccessible(true);
    21 
    22 
    23             //运行目标方法(java语言知识调用方法,利用反射也可以),这里用反射
    24             TestTimeLimit obj = new TestTimeLimit();
    25             long startTime = System.currentTimeMillis();
    26             reflectMethodRun.invoke(obj);
    27             long endTime = System.currentTimeMillis();
    28             System.out.println("value="+value+", startTime="+startTime+", endTime="+endTime);
    29             //第五步,方法的实际运行时间,是否超出注解规定的上限
    30             if((endTime-startTime)>value){
    31                 throw new IllegalCallerException("非法方法调用运行异常"+"run");
    32             }
    33 
    34         }
    35 
    36 
    37     }
    38 }
     1 package annotation;
     2 
     3 import java.lang.annotation.Retention;
     4 import java.lang.annotation.RetentionPolicy;
     5 
     6 @Retention(RetentionPolicy.RUNTIME) //说明注解的保留级别,默认是在.class阶段,执行时不会运行注解相关;所以要设置位Runntime
     7 public @interface RunTimeLimit {
     8     //定义一个属性,来描述,方法运行时间的上限
     9     long value();
    10 }
     1 package annotation;
     2 /*
     3 1. 自定义注解,该注解用来描述,方法运行所需的时间上限(用long类型的数据表示时间,单位为ms),
     4         然后,自定义注解处理器,运行加了运行时间上限注解的方法,判断方法的运行时间,
     5         是否超出了注解中规定的时间上限,如果超过,则返回true,未超过返回false
     6 */
     7 
     8 
     9 public class TestTimeLimit {
    10     @RunTimeLimit(100)
    11     public void run() throws InterruptedException {
    12         Thread.sleep(300);
    13     }
    14 }


  • 相关阅读:
    Kafka与RabbitMQ区别
    Illegal instruction 问题的解决方法
    Debian 6 , 十个串口为什么只识别到了 6个 剩下4 个被禁止了
    微信二次认证 C#
    修改XtraMessageBox的内容字体大小
    svn: E155017: Checksum mismatch while updating 校验错误的解决方法
    再生龙恢复分区后修复引导或debian linux修复引导 三部曲
    Clonezilla制作镜像时报错: errextfsclone.c:bitmap free count err
    我用windows live Writer 写个日志试试看
    Debian下签名无法验证
  • 原文地址:https://www.cnblogs.com/debug-the-heart/p/13264063.html
Copyright © 2011-2022 走看看