Spring 怎么获取自定义注解标注的方法

在我自己的项目中,我自定义一个注解

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ExcelSheet {

    /**
     * 表格类别
     * @return
     */
    String value();

    /**
     * 创建的顺序(越大越往后执行)
     * @return
     */
    int index();
}

用来标注一些方法
例如:

 @ExcelSheet(value = "excel", index = 1)
    public void firstCallImpl() {
   //一些执行的代码
}

我现在的需求:
如果有多个方法被这个注解标注了那么,我能通过这个注解获取这个方法吗?
感谢大佬们的回答

第一步,你要知道都有哪些class中加了注解,如果不知道,就要根据包名遍历工程下所有的class了
第二步,获取class中所有的method,通过method中的 method.getAnnotation(ExcelSheet.class) 方法获取注解,如果能获取到,说明该字段上标了该注解,如果获取不到就表示没标。

PS:遍历工程下所有的class是非常耗时的操作,建议系统启动的时候遍历一遍,然后缓存起来,以后再获取ExcelSheet注解的方法是,直接从缓存中取即可

以aop around 为列,可以这样写,仅供参考

@Around("within(com.fly..* )")
 public Object around(ProceedingJoinPoint joinPoint)
        throws Throwable
    {
        String className = joinPoint.getTarget().getClass().getSimpleName();
        MethodSignature signature = (MethodSignature)joinPoint.getSignature();
        Method method = signature.getMethod();
        String methodName = new StringBuilder(className).append(".").append(method.getName()).toString();
        boolean isExcelSheet = method.isAnnotationPresent(ExcelSheet.class);
                。。。
        }   

知道你的需求了,换一种思路,使用你这个自定义注解的类是spring管理的,根据上下文获取bean的代码为:

 LOGGER.info("★★★★★★★★ ApplicationContext = {}", applicationContext);
        int i = 1;
        for (String beanName : applicationContext.getBeanDefinitionNames())
        {
            LOGGER.info("{}.\t{}", i, applicationContext.getBean(beanName));
            i++;
        }

下面用反射的方式去判断应该不难了吧,可以自己调试,供参考。

补充下这个问题的需求:
上边这个问题的需求的原因:
我现在需要做一个excel ,一个excel里会有多个sheet ,我这个就是给注解的value相同的就会组成一个excel,而且根据index 的先后调用,到时候我就不用手动调用生成每个sheet。我只需要关注每个sheet是怎么生成的,达到解耦的目的