java - Bagaimanakah SpringAOP mendapatkan maklumat anotasi pada kelas yang melaksanakan kaedah?
天蓬老师
天蓬老师 2017-06-30 09:54:55
0
3
977

Fungsi yang ingin saya capai adalah jika ia berada di class上注解了需要验证用户,那么里面的method就不需要逐个去写这个注解。
如果method写了注解,则以method.

Selepas menyemak, saya mendapati kebanyakan artikel bercakap tentang cara mendapatkan anotasi pada method上的注解,而没有说到如何获得class.
Tolong Tuhan berikan saya sekeping kod.

Digabungkan dengan jawapan yang diterima, kod lengkap adalah seperti berikut:

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

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

membalas semua(3)
Ty80

Gunakan alatan Spring sendiriorg.springframework.core.annotation.AnnotationUtils#findAnnotation(java.lang.Class<?>, java.lang.Class<A>)

刘奇

Anda boleh membaca artikel ini anotasi Java

typecho

potong aop di sini

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

Anotasi tersuai

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

  • API kawalan anotasi tersuai
    */

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

  String name()  default "" ;   

}

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan