package cn.sdut.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LoggingAspectJ {
/*@Before(value="execution(public int cn.sdut.aop.ArithmeticCal.*(int, int))")
public void beforeLogging(JoinPoint jp) {
String methodName = jp.getSignature().getName();
Object[] args = jp.getArgs();
System.out.println("即将执行" + methodName + "\t参数是:" + Arrays.toString(args));
}
@After("execution(public int cn.sdut.aop.ArithmeticCal.*(int, int))")
public void afterLogging(JoinPoint jp) {
String methodName = jp.getSignature().getName();
System.out.println("已执行完毕" + methodName);
}
@AfterReturning(pointcut="execution(* *cn.sdut.aop.ArithmeticCal.*(..))",returning="result")
public void returnLogging(JoinPoint jp, Object result) {
String methodName = jp.getSignature().getName();
System.out.println("执行方法是" + methodName + "\t返回的结果是:" + result);
}
@AfterThrowing(pointcut="execution(* *cn.sdut.aop.ArithmeticCal.*(..))",throwing="e")
public void throwLogging(JoinPoint jp, Exception e) {
//获取方法名
String methodName = jp.getSignature().getName();
System.out.println("[★Logging]The method "+methodName+" 异常是 " + e);
}*/
@Pointcut("execution(* *cn.sdut.aop.ArithmeticCal.*(..))")
public void pointcut() {};
@Around("pointcut()")
public Object aroundLogging(ProceedingJoinPoint pjp) {
//获取方法名
String methodName = pjp.getSignature().getName();
//获取参数
Object[] args = pjp.getArgs();
Object result = null;
try {
//前置通知
//执行方法
result = pjp.proceed();
//返回通知
}catch(Throwable e) {
//异常通知
}finally{
//异常通知
}
return result;
}
}