在xml文件中配置了<aop:around method="around" pointcut-ref="pc1"/>后,发现控制行只执行around方法,打印around,而不执行被环绕方法。
后来经过多方查阅资料发现,需要在增强方法定义时声明参数ProceedingJoinPoint ,即
around(ProceedingJoinPoint pj){}。
在增强方法中使用ProceedingJoinPoint中的proceed方法,并在其前后自行编写需要实现的功能代码。proceed方法会返回一个object,为被增强方法的返回值,并且需要在around中返回,原先被增强方法将不会返回。
例子:
public void around(ProceedingJoinPoint jp) throws Throwable { System.out.println("around1!"); jp.proceed(); System.out.println("around2!"); }
public void printaopbean(){ System.out.println("aaa"); }
控制台输出:
around1!
aaa
around2!
有关joinpoint的知识可以参考这些博客