JAVA中注解的使用
Posted JC97
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
以上是关于JAVA中注解的使用的主要内容,如果未能解决你的问题,请参考以下文章