SpringAop切面中获取方法的返回值
场景:需要用到aop统一接口异常的返回值当接口抛出异常的时候封装成response对象,但是如果不同接口要返回的response不同,需要在执行前获取到接口返回值的类型如果要取到方法的返回值,需要先获取到method的对象遵守这个思路可以看到 around方法的参数类型ProceedingJoinPoint是一个接口该接口的方法 joinPoint.getSignature() 会...
·
场景:
需要用到aop统一接口异常的返回值
当接口抛出异常的时候封装成response对象,但是如果不同接口要返回的response不同,需要在执行前获取到接口返回值的类型
如果要取到方法的返回值,需要先获取到method的对象
遵守这个思路
可以看到 around方法的参数类型ProceedingJoinPoint 是一个接口
该接口的方法 joinPoint.getSignature() 会返回方法签名信息
该方法返回的签名信息的对象类型 是Siganture ,是一个接口,
其实现类是MethodInvocationProceedingJoinPoint里面的一个内部类
MethodSignatureImpl。
这个内部类 实现了 MethodSignature接口
而恰好,MethodSignature接口就提供了可以获取方法返回值的方法
那么看下具体的获取过程
@Around("execution(* com.xx.xx..xx.xx.*.*(..))")
public Object around(ProceedingJoinPoint joinPoint) {
//类型转换,向下转型,必定成功,因为其内部的实现MethodSignatureImpl实现的就是MethodSignature接口
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//获取method对象
Method method = signature.getMethod();
//获取方法的返回值的类型
Class returnType= method.getReturnType();
...
}
更多推荐
已为社区贡献1条内容
所有评论(0)