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 }


  • 相关阅读:
    打怪(CDQ分治+斜率优化)
    中缀表达式求值
    马拉车(manacher)算法
    后缀数组的求法及应用
    【最小生成树】藏宝图(prim)
    【最小生成树】prim算法
    [最近公共祖先]最近公共祖先(LCA)
    [思维]Supreme Number
    [模拟] Lattice's basics in digital electronics(2018沈阳赛区网络预赛)
    【搜索+思维】Distinctive Character
  • 原文地址:https://www.cnblogs.com/debug-the-heart/p/13264063.html
Copyright © 2011-2022 走看看