- 原始方法正常执行完毕并返回结果后执行,如果原始方法中抛出异常,无法执行
- 主要用于日志记录返回值
- 在后置通知中修改返回值,不会影响目标参数的结果
语法
<aop:afterreturning method="执行方法" pointcut="切入表达式"/>
<aop:afterreturning method="执行方法" pointcut-ref="切入表达式id" />
参数 |
描述 |
method |
在通知类中设置当前通知类别对应的方法 |
pointcut |
设置当前通知对应的切入点表达式,不能同时使用pointcut-ref |
pointcut-ref |
设置当前通知对应的切入点id,不能同时使用pointcut |
示例
- application.xml
<aop:aspect ref="adviceId"> <!--直接配置切入点--> <aop:after-returning method="doAfterReturning" pointcut="execution(* com.exi.service.LogApectHandler.*.*(..))"/> </aop:aspect> |
<aop:pointcut id="pt" expression="execution(* com.exi.service.LogApectHandler.*.*(..))"/>
<aop:aspect ref="adviceId">
<!--使用公共切入点-->
<aop:before method="doAfterReturning" pointcut-ref="pt"/>
</aop:aspect>
- LogAspectHandler.java
public class LogAspectHandler { /** * 在上面定义的切面方法返回后执行该方法,可以捕获返回对象或者对返回对象进行增强 * @param joinPoint joinPoint * @param result result */ @AfterReturning(pointcut = "pointCut()", returning = "result") public void doAfterReturning(JoinPoint joinPoint, Object result) {
Signature signature = joinPoint.getSignature(); String classMethod = signature.getName(); log.info("方法{}执行完毕,返回参数为:{}", classMethod, result); // 实际项目中可以根据业务做具体的返回值增强 log.info("对返回参数进行业务上的增强:{}", result + "增强版"); } }
|
运行结果:
方法 testAop 执行完毕,返回参数为:Hello CSDN
对返回参数进行业务上的增强:Hello CSDN 增强版