java - Wie erhält SpringAOP Annotationsinformationen für die Klasse, die die Methode ausführt?
天蓬老师
天蓬老师 2017-06-30 09:54:55
0
3
987

Die Funktion, die ich erreichen möchte, ist, wenn sie in class上注解了需要验证用户,那么里面的method就不需要逐个去写这个注解。
如果method写了注解,则以method ist.

Nachdem ich es überprüft habe, habe ich festgestellt, dass in den meisten Artikeln davon die Rede ist, wie man die Anmerkungen zu method上的注解,而没有说到如何获得class erhält.
Bitte Gott, gib mir einen Code.

In Kombination mit der akzeptierten Antwort lautet der vollständige Code wie folgt:

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;
            }
        }
    }
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

Antworte allen(3)
Ty80

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

刘奇

可以看看这篇文章 Java注解

typecho

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 "" ;   

}

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage