切入点
@Override
public int getAge(String name , int age) {
System.out.println("年龄:"+age);
return age;
}
1.获取参数
(1)前置、后置、返回后、抛出异常后通知
@Before("pt()")// 后置、返回后、抛出异常后通知都使用这个形式
public void beforeAdvice(JoinPoint jp){
Object[] args = jp.getArgs();
System.out.println("前置通知获取参数:" + Arrays.toString(args));
}
(2)适用于环绕通知
@Around("pt()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("在连接点之前执行的共性功能");
Object proceed = pjp.proceed();// 表示对原始操作的调用
Object[] args = pjp.getArgs();
System.out.println("环绕通知获取参数:" + Arrays.toString(args));
System.out.println("在连接点之后执行的共性功能");
return proceed;
}
2.获取返回值
(1)返回后通知
注:如果返回后通知同时获取参数和返回值,通知的形参必须是JoinPoint形参在前,接收返回值的形参在后
@AfterReturning(value = "pt()" , returning = "ret")
public void afterReturning(Object ret){
System.out.println("返回后通知获取切入点方法返回值:" + ret);
System.out.println("返回后通知:原始方法成功执行完之后执行的共性功能");
}
(2)环绕通知
@Around("pt()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("在连接点之前执行的共性功能");
Object proceed = pjp.proceed();// 表示对原始操作的调用
System.out.println("在连接点之后执行的共性功能");
return proceed;
}
3.获取异常
(1)抛出异常后通知
@AfterThrowing(value = "pt()", throwing = "e")
public void afterThrowing(Throwable e){
e.printStackTrace();
System.out.println("抛出异常后通知:原始方法抛出异常之后执行的共性功能");
}
(2)环绕通知
@Around("pt()")
public Object aroundAdvice(ProceedingJoinPoint pjp) {
System.out.println("在连接点之前执行的共性功能");
Object proceed = null;// 表示对原始操作的调用
try {
proceed = pjp.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("在连接点之后执行的共性功能");
return proceed;
}