java - SpringAOP如何获得执行方法的class上的注解信息
问题描述
我想实现的功能是,如果在class上注解了需要验证用户,那么里面的method就不需要逐个去写这个注解。如果method写了注解,则以method的为准。
查了一下,发现多数文章说的都是如何获得method上的注解,而没有说到如何获得class上的注解。求大神赐予我一段代码。
结合采纳的答案,完整代码如下:
private AuthType getAuthType(ProceedingJoinPoint pj) {// 获取切入的 MethodMethodSignature 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; }} }
问题解答
回答1:用Spring自带工具org.springframework.core.annotation.AnnotationUtils#findAnnotation(java.lang.Class<?>, java.lang.Class<A>)
回答2:可以看看这篇文章 Java注解
回答3: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 '' ;
}
相关文章:
1. android - 京东移动端网页和其app加载的url所做的呈现不应该是完全一样的吗?2. 站点内容复制额外增加的版权申明,真的很反人类。试问产品自己在用这个站点吗?3. mysql - 我的myeclipse一直连显示数据库连接失败,不知道为什么4. css3 - 这个效果用 CSS 可以实现吗?border-image5. python - 在sqlalchemy中获取刚插入的数据id?6. javamail发送邮件是否跟所在的网络环境有关?7. vue.js - vue 打包后 nginx 服务端API请求跨域问题无法解决。8. CSS3 flex 如何让高度不等的同排等高?9. css - 移动端 盒子内加overflow-y:scroll后 字体会变大10. javascript - 在vue-cli引入vux后 使用报错

网公网安备