类似于使用@Before注解可以修饰Before增强处理,使用@AfterReturning可修饰AfterReturning增强处理,AfterReturning增强处理将在目标方法正常完成后被织入。

使用@AfterReturning注解可指定如下两个常用属性。

1)        pointcut/value:这两个属性的作用是一样的,它们都属于指定切入点对应的切入表达式。一样既可以是已有的切入点,也可直接定义切入点表达式。当指定了pointcut属性值后,value属性值将会被覆盖。

2)        returning:该属性指定一个形参名,用于表示Advice方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值。除此之外,在Advice方法中定义该形参(代表目标方法的返回值)时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值。

下面的程序定义 了一个AfterReturnig增强处理。

// 定义一个切面
@Aspect
public class LogAspect
{// 匹配com.owenapp.service.impl包下所有类的、// 所有方法的执行作为切入点@AfterReturning(returning="rvt", pointcut="execution(* com.owen.app.service.impl.*.*(..))")// 声明rvt时指定的类型会限制目标方法必须返回指定类型的值或没有返回值// 此处将rvt的类型声明为Object,意味着对目标方法的返回值不加限制public void log(Object rvt){System.out.println("获取目标方法返回值:" + rvt);System.out.println("模拟记录日志功能...");}
}

上面的程序中使用@AfterReturning注解时,指定了一个returning属性,该属性值为rvt,这表明允许在Advice方法(log()方法)中定义名为rvt的形参,程序可通过rvt形参来访问目标方法的返回值。

该应用的目标Bean类,依然是HelloImpl.java和WorldImple.java,这两个类与SpringAOP(一)Before增强处理中的类是一样的,这里就写出,读者可以到前面章节参考。

执行结果如下。

[java] 信息:Loading XML bean definitions from class path resource…
[java]执行Hello组件的foo()方法
[java]获取目标方法返回值:null
[java]模拟记录日志功能…
[java]执行Hello组件的addUser添加用户:owen
[java]获取目标方法返回值:20
[java]模拟记录日志功能…
[java]执行World组件的bar()方法
[java]获取目标方法返回值:null
[java]模拟记录日志功能…

注意:

虽然AfterReturning增强处理可以访问到方法的返回值,但它不可以改变目标方法的返回值。

Spring AOP(二)之AfterReturning增强处理相关推荐

  1. AOP(二)之AfterReturning增强处理

    @AfterReturning @AfterReturning可修饰AfterReturning增强处理,AfterReturning增强处理将在目标方法正常完成后被织入. 使用@AfterRetur ...

  2. Spring AOP之@Around,@AfterReturning使用、切不进去问题解决

    前言 本文主要举几个工作中典型AOP的实操案例,还有经常出现的问题(切不进去,ctrl+左键跳不到被切方法中)等等. 本文对于AOP的实现原理概不讨论,百度一搜有的是. AOP的使用背景和好处 比如A ...

  3. Spring AOP 增强框架 Nepxion Matrix 详解

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 概述 在<深入聊一聊 Spring AOP 实现机制>一文中,介绍了 Spring A ...

  4. spring aop 自定义注解配合swagger注解保存操作日志到mysql数据库含(源码)

    spring aop 自定义注解保存操作日志到mysql数据库 一.思路 二.自定义注解 三.编写操作日志 四.编写操作日志切面\增强 五.使用 六.`注意` 一.思路 利用spring aop 对方 ...

  5. Spring AOP 功能使用详解

    前言 AOP 既熟悉又陌生,了解过 Spring 人的都知道 AOP 的概念,即面向切面编程,可以用来管理一些和主业务无关的周边业务,如日志记录,事务管理等:陌生是因为在工作中基本没有使用过,AOP ...

  6. Spring AOP 快速入门

    文章目录 一. 什么是Spring AOP 二. 为什么要学习Spring AOP 三. 学习 Spring AOP 3.1 AOP 的组成 3.1.1 切面 (Aspect) 3.1.2 切点 (P ...

  7. Spring AOP超详细解析

    AOP - 面向切面编程(Aspect Oriented Programming) Spring早期版本的核心功能:管理对象生命周期与对象分配. 即Bean本身的管理创建,以及它整个生命周期里跟其他对 ...

  8. 面试官:说说Spring AOP、AspectJ、CGLIB ?它们有什么关系?

    欢迎关注方志朋的博客,回复"666"获面试宝典 AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务 ...

  9. 面试官:Spring AOP、AspectJ、CGLIB 都是什么鬼?它们有什么关系?

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等. AOP 实现的关键就在 ...

  10. Spring AOP,AspectJ,CGLIB 有点晕

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...

最新文章

  1. 精美素材分享:16套免费的扁平化图标下载
  2. 机器学习流程模板及多模型对比实战梳理
  3. 元素水平垂直居中的方法
  4. Thymeleaf语法变量
  5. Java多线程(五):线程池应该设置多少核心线程数
  6. NET问答: C# 中是否有最高效的方式对大文件做 checksum ?
  7. 如何在面试时写出高质量的代码
  8. python数据科学入门_干货!小白入门Python数据科学全教程
  9. 使用jsp循环查询mysql_[JSP] 创建mysql数据库利用JSP进行数据库查询(1)
  10. linux eclipse 菜单,Ubuntu 16.04中的Eclipse Mars菜单栏选项失效
  11. Python无限播放励志语句
  12. zookeeper做分布式配置中心
  13. Compile syslog-win32
  14. JavaScript---去除字符串中的空格(五种方式,总有一种适合你)
  15. sql替换字符串中的部分字符
  16. 啦啦外卖独立版42.0至尊版全开源含vue代码修复app没声音
  17. 智能决策支持系统(IDSS)
  18. 什么是客户管理系统?
  19. SOLIDWORKS在机械设计行业的优势所在
  20. 海洋地球物理探测方法综述(二)

热门文章

  1. 你所不知道的JavaScript数组
  2. 马化腾:互联网企业竞争要注重什么
  3. java 多线程之间通信_java多线程之间的通信
  4. WLAN配置实例(二)——三层组网隧道转发
  5. shell 第一次练习
  6. 如何定位http的url路径资源
  7. 使用FileUpload组件上传文件
  8. Solidity陷阱:以太坊的随机数生成
  9. Spring Boot (一)快速入门
  10. SpringFramework核心技术一(IOC:详细的依赖和配置)