题目:自定义注解@Order:排序以下方法的执行顺序
package com.yunhe.test;
import com.yunhe.annotation.Order;
public class RunOrder {
@Order(value = 1)
public void test1(){
System.out.println("value为 1 的方法执行了");
}
@Order(4)
public void test4(){
System.out.println("value为 4 的方法执行了");
}
@Order(5)
public void test5(){
System.out.println("value为 5 的方法执行了");
}
@Order(3)
public void test3(){
System.out.println("value为 3 的方法执行了");
}
@Order(2)
public void test2(){
System.out.println("value为 2 的方法执行了");
}
}
一、书写自定义注解
package com.yunhe.annotation;
import java.lang.annotation.*;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Order {
int value() default 0;
}
二、书写注解处理器
package com.yunhe.handler;
import com.yunhe.annotation.Order;
import com.yunhe.test.RunOrder;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
public class OrderHandler {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException {
Class clazz = RunOrder.class;
Object runOrder = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
SortedMap<Integer,Method> rstMap = new TreeMap<>();
for (Method method : methods) {
if(method.isAnnotationPresent(Order.class)){
Order order = method.getAnnotation(Order.class);
int num = order.value();
rstMap.put(num,method);
}
}
for (Map.Entry<Integer, Method> entry : rstMap.entrySet()) {
entry.getValue().invoke(runOrder);
}
}
}
三、执行结果
value为 1 的方法执行了
value为 2 的方法执行了
value为 3 的方法执行了
value为 4 的方法执行了
value为 5 的方法执行了