Spring AOP(五)之Around增强处理
2016-03-06 12:28
459 查看
@Around注解用于修饰Around增强处理,Around增强处理是功能比较强大的增强处理,它近似于Before增强处理和AfterReturing增强处理的总结,Around增强处理既可在执行目标方法之前增强动作,也可在执行目标方法之后织入增强的执行。与Before增强处理、AfterReturning增强处理不同的是,Around增强处理可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标方法的执行。
当定义一个Around增强处理方法时,该方法的第一个形参必须是ProceedJoinPoint类型(至少含有一个形参),在增强处理方法体内,调用ProceedingJoinPoint参数的procedd()方法才会执行目标方法——这就是Around增强处理可以完全控制方法的执行时机、如何执行的关键;如果程序没有调用ProceedingJoinPoint参数的proceed()方法,则目标方法不会被执行。下面定义一个Around增强处理。
该应用的目标Bean类,依然是HelloImpl.java和WorldImple.java,这两个类与SpringAOP(一)Before增强处理中的类是一样的,这里就写出,读者可以到前面章节参考。执行主程序的结果如下。
当定义一个Around增强处理方法时,该方法的第一个形参必须是ProceedJoinPoint类型(至少含有一个形参),在增强处理方法体内,调用ProceedingJoinPoint参数的procedd()方法才会执行目标方法——这就是Around增强处理可以完全控制方法的执行时机、如何执行的关键;如果程序没有调用ProceedingJoinPoint参数的proceed()方法,则目标方法不会被执行。下面定义一个Around增强处理。
// 定义一个切面 @Aspect public class TxAspect { // 匹配com.owen.app.service.impl包下所有类的、 // 所有方法的执行作为切入点 @Around("execution(* com.owen.app.service.impl.*.*(..))") public Object processTx(ProceedingJoinPoint jp) throws java.lang.Throwable { System.out.println("执行目标方法之前,模拟开始事务..."); // 获取目标方法原始的调用参数 Object[] args = jp.getArgs(); if(args != null && args.length > 1) { // 修改目标方法的第一个参数 args[0] = "【增加的前缀】" + args[0]; } // 以改变后的参数去执行目标方法,并保存目标方法执行后的返回值 Object rvt = jp.proceed(args); System.out.println("执行目标方法之后,模拟结束事务..."); // 如果rvt的类型是Integer,将rvt改为它的平方 if(rvt != null && rvt instanceof Integer) rvt = (Integer)rvt * (Integer)rvt; return rvt; } }
该应用的目标Bean类,依然是HelloImpl.java和WorldImple.java,这两个类与SpringAOP(一)Before增强处理中的类是一样的,这里就写出,读者可以到前面章节参考。执行主程序的结果如下。
[java] 信息:Loading XML bean definitions from class path resource… [java]执行目标方法之前,模拟开始事务… [java]执行Hello组件的foo()方法 [java]执行目标方法之后,模拟结束事务… [java]执行目标方法之前,模拟开始事务… [java]执行Hello组件的addUser添加用户:【增加的前缀】owen [java]执行目标方法之后,模拟结束事务… [java]addUser()的返回值为:400 [java]执行目标方法之前,模拟开始事务… [java]执行World组件的bar()方法 [java]执行目标方法之后,模拟结束事务…
相关文章推荐
- Spring AOP(四)之After增强处理
- java实现二叉树的构建和遍历
- java学习笔记(一)System.out.println探究
- Spring AOP(三)之AfterThrowing增强处理
- Spring Demo遇到的异常
- Spring AOP(二)之AfterReturning增强处理
- java设计模式学习笔记第三章
- java dom4j 曾删改查、编码XML文件
- 白话Spring(基础篇)---编程式事务(1)
- java设计模式学习笔记第二章
- SPRING IN ACTION 第4版笔记-第七章Advanced Spring MVC-006- 如何保持重定向的request数据(用model、占位符、RedirectAttributes、model.addFlashAttribute("spitter", spitter);)
- eclipse 安装struts2 插件
- 简要介绍JAVA8中的函数式编程;Brief Introduction to Functional Programming in Java 8
- 20145216史婧瑶《Java程序设计》第一周学习总结
- 20145216史婧瑶《Java程序设计》第一周学习总结
- Android Sdk 和ADT Eclipse安装配置步骤
- 安装Java jdk1.6或1.7的详细步骤和配置环境变量的另类办法
- java基础题目总结
- HDU—— 2005 第几天? (java版)
- Java 抽象类与接口区别