每一个横切关注点上要做的事情都需要写一个方法来实现,这样的方法就叫通知方法。
前置通知:在被代理的目标方法前执行(@Before)
@Before(value = " ")
public void method(JoinPoint joinPoint){
//可以获得方法名字
String Methodname = joinPoint.getSignature().getName();
//可以获得方法输入的参数
object[] args= joinPoint.getArgs();
}
返回通知:在被代理的目标方法成功结束后执行(@AfterReturning)
@AfterReturning(" ", returning = "valuename")
public void afterReturningMethod(JoinPoint joinPoint,Object valuename){
String methodName = joinPoint.getSignature().getName();
}
异常通知:在被代理的目标方法异常结束后执行(@AfterThrowing)
@AfterThrowing(" ", throwing = "throwablename")
public void afterReturningMethod(JoinPoint joinPoint,throwable throwablename){
String methodName = joinPoint.getSignature().getName();
}
后置通知:在被代理的目标方法最终结束后执行(@After)
@After(value =" ")
pubilc void method(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
}
环绕通知:使用try..catch..finally结构围绕整个被代理的目标方法,包括上面四种通知对应的所有位置(@Around)(ProceedingJoinPoint继承JoinPoint,实现了更强大的功能)
@Around(" ")
public void afterReturningMethod(ProceedingJoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
String argString= Arrays.tostring(args);
Object result = null;
try{
System.out.println("环绕通知==目标方法之前执行");
//调用目标方法
Object result= joinPoint.proceed();
System.out.println("环绕通知==目标方法返回值之后");
}catch(Throwable throwable){
throwable.printStackTrace();
System.out.println("环绕通知==目标方法出现异常执行");
} finally {
System.out.println("环绕通知==目标方法出现异常执行");
}
}
注解后面需要有参数