编程技术分享平台

网站首页 > 技术教程 正文

aop切片获取不到annotation注解(切片工具无法存为web)

xnh888 2024-10-19 15:59:58 技术教程 72 ℃ 0 评论

#头条创作挑战赛#

aop切片获取不到annotation注解?

先看获取方式:

MethodSignature methodSignature = ((MethodSignature) proceedingJoinPoint.getSignature());
// 获取注解
ThirdAPI thirdAPI = methodSignature.getMethod().getAnnotation(ThirdAPI.class);

Spring项目默认使用的JDK代理,JDK代理必须通过接口类进行代理。当我们注解在实现类的时候,实际获取的代理类是接口类,所以是无法获取到注解的。

解决的办法一般是在接口类方法上也加上注解。

不过这种方法不太符合程序猿的美感。

另外一种方法是使用CGLIB的代理,CGLIB代理是通过父类进行代理(不用自己实现父类)。

当然,对于一些老项目来说更换代理方式可能会导致老代码无法运行。

终极方案就是:通过反射获取当前执行的方法,这个方法是真实执行的,并非代理对象的。

Method realMethod = proceedingJoinPoint.getTarget().getClass().getDeclaredMethod(methodSignature.getName(), methodSignature.getParameterTypes());
thirdAPI = realMethod.getAnnotation(ThirdAPI.class);

如上,即可获取到实际执行方法上的注解了。


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表