使用自定义注解实现Java方法的排序执行

141 阅读1分钟

在Java开发中,我们有时需要控制某些方法的执行顺序,特别是在初始化、测试或特定业务逻辑场景下。本文将介绍如何通过自定义注解来实现方法的排序执行。

1、定义注解

创建一个自定义注解@ExecuteOrder来标记方法的执行顺序。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ExecuteOrder {
    int value() default 0;
}

2、使用注解标记方法

public class Processor {
    @ExecuteOrder(1)
    public void step1() {
        System.out.println("执行 step1");
    }
    
    @ExecuteOrder(3)
    public void step2() {
        System.out.println("执行 step2");
    }
    
    @ExecuteOrder(2)
    public void step3() {
        System.out.println("执行 step3");
    }
    
    // 没有注解的方法不会被执行
    public void utilityMethod() {
        System.out.println("工具方法");
    }
}

3、实现注解处理器

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class AnnotationProcessor {
    public static void process(Object instance) {
        // 获取所有方法
        Method[] methods = instance.getClass().getDeclaredMethods();
        
        // 过滤并排序带有@ExecuteOrder注解的方法
        List<Method> orderedMethods = Arrays.stream(methods)
                .filter(m -> m.isAnnotationPresent(ExecuteOrder.class))
                .sorted(Comparator.comparingInt(m -> m.getAnnotation(ExecuteOrder.class).value()))
                .toList();
        
        // 按顺序执行方法
        for (Method method : orderedMethods) {
            try {
                method.invoke(instance);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

4、使用示例

public class Main {
    public static void main(String[] args) {
        Processor processor = new Processor();
        AnnotationProcessor.process(processor);
    }
}

输出结果:

执行 step1
执行 step3
执行 step2