JAVA中注解的使用

2021-04-24 13:28

阅读:540

标签:false   ndt   判断   exce   异常   相关   isa   long   语言   


自定义注解,该注解用来描述,方法运行所需的时间上限
用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 }

 



JAVA中注解的使用

标签:false   ndt   判断   exce   异常   相关   isa   long   语言   

原文地址:https://www.cnblogs.com/debug-the-heart/p/13264063.html


评论


亲,登录后才可以留言!