Spring AOP @Around通知返回值何时向下转型?
Spring AOP @Around通知返回值的转型时机
你提到的@Around通知用Object作为返回类型,是为了适配任意返回类型的目标方法。关于返回值何时转为实际类型,核心逻辑如下:
代理不会提前执行转型:Spring生成的代理对象在跑完切面逻辑、拿到
joinPoint.proceed()返回的结果(这里实际是String实例,只是用Object类型接收)后,会直接把这个Object实例返回给调用方。转型发生在调用方代码执行时:主方法里的
String result = account.getAccountHolderName();这一行,就是触发向下转型的实际时机。Java编译器会自动在这里插入隐式类型转换,等效于执行String result = (String) account.getAccountHolderName();。
这个转型是安全的,因为joinPoint.proceed()调用的目标方法getAccountHolderName()本身返回的就是String类型,通知返回的Object本质上就是String实例,不会出现类型转换异常。
对应的代码示例:
主方法代码:
String result = account.getAccountHolderName();
切面类代码:
@Around("execution(* getAccountHolderName())") public Object myAroundAdvice(ProceedingJoinPoint joinPoint) { Object result = joinPoint.proceed(); return result; }
内容的提问来源于stack exchange,提问作者Pranav Kopnar
相关产品推荐
相关产品推荐

