Spring AOP(五)之Around增强处理

@Around注解用于修饰Around增强处理,Around增强处理是功能比较强大的增强处理,它近似于Before增强处理和AfterReturing增强处理的总结,Around增强处理既可在执行目标方法之前增强动作,也可在执行目标方法之后织入增强的执行。与Before增强处理、AfterReturning增强处理不同的是,Around增强处理可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标方法的执行。

当定义一个Around增强处理方法时,该方法的第一个形参必须是ProceedJoinPoint类型(至少含有一个形参),在增强处理方法体内,调用ProceedingJoinPoint参数的procedd()方法才会执行目标方法——这就是Around增强处理可以完全控制方法的执行时机、如何执行的关键;如果程序没有调用ProceedingJoinPoint参数的proceed()方法,则目标方法不会被执行。下面定义一个Around增强处理。

[java]  view plain  copy
  1. // 定义一个切面  
  2. @Aspect  
  3. public class TxAspect  
  4. {  
  5.     // 匹配com.owen.app.service.impl包下所有类的、  
  6.     // 所有方法的执行作为切入点  
  7.     @Around("execution(* com.owen.app.service.impl.*.*(..))")  
  8.     public Object processTx(ProceedingJoinPoint jp)  
  9.         throws java.lang.Throwable  
  10.     {  
  11.         System.out.println("执行目标方法之前,模拟开始事务...");  
  12.         // 获取目标方法原始的调用参数  
  13.         Object[] args = jp.getArgs();  
  14.         if(args != null && args.length > 1)  
  15.         {  
  16.             // 修改目标方法的第一个参数  
  17.             args[0] = "【增加的前缀】" + args[0];  
  18.         }  
  19.         // 以改变后的参数去执行目标方法,并保存目标方法执行后的返回值  
  20.         Object rvt = jp.proceed(args);  
  21.         System.out.println("执行目标方法之后,模拟结束事务...");  
  22.         // 如果rvt的类型是Integer,将rvt改为它的平方  
  23.         if(rvt != null && rvt instanceof Integer)  
  24.             rvt = (Integer)rvt * (Integer)rvt;  
  25.         return rvt;  
  26.     }  
  27. }  

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

[plain]  view plain  copy
  1. [java] 信息:Loading XML bean definitions from class path resource…  
  2. [java]执行目标方法之前,模拟开始事务…  
  3. [java]执行Hello组件的foo()方法  
  4. [java]执行目标方法之后,模拟结束事务…  
  5. [java]执行目标方法之前,模拟开始事务…  
  6. [java]执行Hello组件的addUser添加用户:【增加的前缀】owen  
  7. [java]执行目标方法之后,模拟结束事务…  
  8. [java]addUser()的返回值为:400  
  9. [java]执行目标方法之前,模拟开始事务…  
  10. [java]执行World组件的bar()方法  
  11. [java]执行目标方法之后,模拟结束事务…  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值