搜索

首页  >  问答  >  正文

java - SpringAOP如何获得执行方法的class上的注解信息

我想实现的功能是,如果在class上注解了需要验证用户,那么里面的method就不需要逐个去写这个注解。
如果method写了注解,则以method的为准。

查了一下,发现多数文章说的都是如何获得method上的注解,而没有说到如何获得class上的注解。
求大神赐予我一段代码。

结合采纳的答案,完整代码如下:

private AuthType getAuthType(ProceedingJoinPoint pj) {
        // 获取切入的 Method
        MethodSignature joinPointObject = (MethodSignature) pj.getSignature();
        Method method = joinPointObject.getMethod();

        boolean flag = method.isAnnotationPresent(AuthTarget.class);
        if (flag) {
            AuthTarget annotation = method.getAnnotation(AuthTarget.class);
            return annotation.value();
        } else {
            // 如果方法上没有注解,则搜索类上是否有注解
            AuthTarget classAnnotation = AnnotationUtils.findAnnotation(joinPointObject.getMethod().getDeclaringClass(), AuthTarget.class);
            if (classAnnotation != null) {
                return classAnnotation.value();
            } else {
                return null;
            }
        }
    }
天蓬老师天蓬老师2709 天前967

全部回复(3)我来回复

  • PHP中文网

    PHP中文网2017-06-30 09:56:55

    用Spring自带工具org.springframework.core.annotation.AnnotationUtils#findAnnotation(java.lang.Class<?>, java.lang.Class<A>)

    回复
    0
  • 怪我咯

    怪我咯2017-06-30 09:56:55

    可以看看这篇文章 Java注解

    回复
    0
  • typecho

    typecho2017-06-30 09:56:55

    aop中切这里

    @Around("log() && @annotation(XXX.XXX.XXX.ControllerApiAnnotationLogin)")

    自定义注解

    /**
    *@author whmyit@163.com
    *@Time 2017-06-16

    • 自定义注解 控制 API
      */

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD,ElementType.TYPE})
    public @interface ControllerApiAnnotationLogin {

      String name()  default "" ;   

    }

    回复
    0
  • 取消回复