- Around注解的功能是强于Before和After注解的功能之和的,它不仅可以修改目标方法的参数和目标方法的返回值,甚至可以让目标方法不执行!但是它需要在安全的线程里执行,所以如果可以使用before和after注解就解决问题的话就不用Around。
- 下面简单说说它的用法
- 和Before一样,Around注解是语法是@Around(参数),这个参数是它的织入点
- 当定义一个Around增强处理方法的时候,该方法的第一个形参必须是Proceedding类型,在增强方法内调用Proceedding的proceed方法才会执行目标方法(这样才可以实现在目标方法执行和之后的处理嘛)。
- 具体怎么处理参数和返回值在代码里讲解。
package before_package; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; @Aspect public class AuthAspect { @Around("execution(* before_package.*.*(..))") public Object processTx(ProceedingJoinPoint proceedingJoinPoint) throws java.lang.Throwable{ // 第一个形参必须是ProceedingJoinPoint System.out.println("执行方法之前"); Object args[] = proceedingJoinPoint.getArgs(); // 在方法运行之前得到他的参数 // 在目标方法执行之前修改它的参数 if(args != null && args.length > 1){ args[0] = "增强的前缀" + args[0]; } Object rvt = proceedingJoinPoint.proceed(args); // 执行目标方法,并且获得它的返回值 System.out.println("方法执行之后"); // 修改返回值 if(rvt != null && rvt instanceof Integer){ rvt = (Integer)rvt * (Integer)rvt; } return rvt; } }
其他的类和测试类和上一篇博文是一样的~~~~
-
这是我看李刚编著的《轻量级javaEE企业应用实战(第五版)-Struts2+Spring5+Hibernate5/JAP2》后总结出来的。
Spring 进阶(16)Spring的AOP(4) 使用注解配置切面(2) @Around注解
最新推荐文章于 2024-01-29 08:00:00 发布