环绕通知用 @Around 注解来声明
可以决定这个方法在什么时候执行,如何执行,甚至是否执行
通知的第一个参数必须是 ProceedingJoinPoint 类型
如下
@Pointcut("execution(* com.sxb.web.v2.wh.unittest2.aop.PersonServiceBean.save(..)) || execution(* com.sxb.web.v2.wh.unittest2.aop.PersonServiceBean.update(..))")
private void anyMethod(){}//定义一个切入点
@Around("anyMethod() && args(name)")
public Object doAccessCheck(ProceedingJoinPoint pjp,String name) throws Throwable{
System.out.println("name2:"+name);
System.out.println("环绕通知");
//原实体类名(包括包名)
String className=pjp.getTarget().getClass().getName();
//原方法名
String methodName=pjp.getSignature().getName();
//原方法实参列表
Object[] arguments=pjp.getArgs();
return null;//pjp.proceed();
}
如上,当,返回值不为pjp.proceed()的时候,切入点的主体方法 将不会再执行;
此时,当前通知返回的值将作为最后结果返回;
注意,对于 @Around中 定义的获取切入点方法的参数表达式 args(name),必须要和切入点的方法对应,在当前方法doAccessCheck中 也要完全对应,否则 通知失效