getAnnotation为null的坑
在写一个基于SpringAOP的权限控制的。
自己定义了一个注解,然后逻辑代码需要通过获取自定义注解的一个属性来进行权限控制。
下面简单上一下关键代码:
自定义注解:
@Documented //有关java doc的注解
@Retention(RetentionPolicy.RUNTIME) //保留时间,这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用.
@Target(ElementType.METHOD) //针对方法
public @interface AuthorizationNeed { //自定义注解的属性,default是设置默认值
//String operation() default "addAndUpdate";
String operation(); //这个属性用来知道这是什么操作,不同操作的写法不一样 }
切点:
/**
* 定义个个切入点
* 所有有这个注解的方法
*/
@Pointcut("@annotation(com.inforPoint.util.AuthorizationNeed)")
private void needAuthorizationPoint() {}
然后在切面中有个@Around的环绕加强,需要在里面获取注解AuthorizationNeed的属性operation的值。 在网上找了个方法,这是一开始的写法:
//下面这句代码是获得那个自定义的注解的对象
AuthorizationNeed authorizationNeed = ( (MethodSignature)proceedingJoinPoint.getSignature() ).getMethod().getAnnotation(AuthorizationNeed.class); String operation = authorizationNeed.operation(); //用注解的时候有指明是什么操作
但却在运行的时候一直反应 这个authorizationNeed是null。
网上有说可能是注解的定义问题,要
@Retention(RetentionPolicy.RUNTIME)
但显然不是这个错。
后面百度了很久之后,原来是这个aop拦截的是ServiceImpl的一个方法,然后这个ServiceImpl又启动了事务管理,而事务管理又是基于AOP的。
也就是说,这个权限的@Around的切面拦截的是个代理对象的方法,而代理对象的方法是不会把原来父类中的方法的注解加上去的,所以这里这个注解的对象为null。后面网上找到了一个可以解决问题的代码:
/**
* 这个方法帮忙拿出注解中的operation属性
* 因为有拦截serviceImpl的方法,而这些方法又加了事务管理,也就是这里也有aop,这些已经是代理类,用之前的写法获得的是代理类的方法,而这些
* 方法是特么不会把父类中的方法的注解加上去的!!!
* @param proceedingJoinPoint
*/
private String getOperationOfTheAnnotation(ProceedingJoinPoint proceedingJoinPoint) throws Exception { Signature signature = proceedingJoinPoint.getSignature();//方法签名
Method method = ( (MethodSignature)signature ).getMethod(); //这个方法才是目标对象上有注解的方法
Method realMethod = proceedingJoinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), method.getParameterTypes()); AuthorizationNeed authorizationNeed = realMethod.getAnnotation(AuthorizationNeed.class); return authorizationNeed.operation(); }
参考博客:
https://www.cnblogs.com/qiumingcheng/p/5923928.html 贴近作者实际地讲这个问题
https://blog.csdn.net/frightingforambition/article/details/78842306
getAnnotation为null的坑的更多相关文章
- null的坑 和 比较运算符、相等运算符的隐式转换问题 (在javascript中,null>=0 为真,null<=0 为真,null==0却为假,null到底是什么?)
null在关系运算中的坑 & 关系运算符的隐式转换问题 注意: 比较运算符 和 相等运算符 的 ECMAscript 语法实现不同. 比较运算符 和 相等运算符 对数据进行了隐式转换, 相当于 ...
- 关于 NULL的坑
有如下的表: select * from testtable where name in ('name'): 结果是第一条: select * from testtable where name n ...
- 如何利用aop的环绕消息处理log, 以及各种坑的记录
如何利用aop的环绕消息处理log, 以及各种坑的记录 本文链接: https://www.cnblogs.com/zizaiwuyou/p/11667423.html 因为项目里有很多地方要打log ...
- 我的Android进阶之旅------>解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug
1.错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null.而之前已经提测快一个月的 ...
- Mysql高手系列 - 第13篇:细说NULL导致的神坑,让人防不胜防
这是Mysql系列第13篇. 环境:mysql5.7.25,cmd命令中进行演示. 当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? ...
- mysql优化过程中遇见的坑(mysql优化问题特别注意)
不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设. 单条查询最后添加 LIMIT 1,停止全表扫描. 对于char ...
- 十三、细说NULL导致的神坑,让人防不胜防
当数据的值为NULL的时候,可能出现各种意想不到的效果,让人防不胜防,我们来看看NULL导致的各种神坑,如何避免? 一.比较运算符中使用NULL 任何值和NULL使用运算符(>.<.> ...
- 使用Spring Boot搭建应用开发框架(一) —— 基础架构
Spring的简史 第一阶段:XML配置,在Spring1.x时代,使用Spring开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件分放到不同的配置文件里,那时候需要频繁的在 ...
- 我的自定义框架 || 基于Spring Boot || 第一步
今天在园子里面看到一位大神写的springboot做的框架,感觉挺不错,遂想起来自己还没有一个属于自己的框架,决定先将大神做好的拿过来,然后加入自己觉得需要的模块,不断完善 目前直接复制粘贴过来的,后 ...
随机推荐
- 记录下 hubot相关
适配器工厂https://hubot.github.com/docs/adapters/ 自己写适配器https://hubot.github.com/docs/adapters/developmen ...
- 关于VLOOKUP函数的用法
“Lookup”的汉语意思是“查找”,在Excel中与“Lookup”相关的函数有三个:VLOOKUP.HLOOKUO和LOOKUP.下面介绍VLOOKUP函数的用法. 一.功能 在表格的首列查找指定 ...
- 理解HTML解析过程
浏览器解析html的过程是:接受网络数据->将二进制码变成字符->将字符变为unicode code points.->tokenizer ->tree constructor ...
- linux系统配置之PATH环境变量的设置(centos)
Centos系统下修改环境变量PATH路径的方法 电脑脑中必不可少的就是操作系统.而Linux的发展非常迅速,有赶超微软的趋势.这里介绍Linux的知识,让你学好应用Linux系统.比如要把/etc/ ...
- hdu-4990 Reading comprehension(快速幂+乘法逆元)
题目链接: Reading comprehension Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- Fast RCNN中RoI的映射关系
写在前面:下面讨论中Kernel Size为奇数,因为这样才能方便一致的确认Kernel中心. 在Fast RCNN中,为了大大减少计算量,没有进行2k次运算前向运算,而是进行了1次运算,然后在从po ...
- Kvm学习文档记录
一.实验环境: 在vmware上打开vt支持选项: 操作系统信息: [root@node2 ~]# cat /etc/issue CentOS release 6.6 (Final) Kernel \ ...
- BZOJ_2369_区间_决策单调性
BZOJ_2369_区间_决策单调性 Description 对于一个区间集合 {A1,A2……Ak}(K>1,Ai不等于Aj(i不等于J),定义其权值 S=|A1∪A2∪……AK|*|A1 ...
- bzoj4455
容斥原理+dp 首先考虑暴力做法,我们希望点和点一对一,那么自然要保存当前点集的状态,需要状压,据说要3^n,那么自然不行 考虑容斥原理,刚才一一对应的限制太强了,我们不要一一对应,只要满足边存在就行 ...
- HDU-2553
N皇后问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...