package com.carry.sPRing.beans.aop;
import java.awt.List;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Component //是個bean
@Aspect //是個切面
public classLogging {
/**
* 在包 com.carry.spring.beans.aop.ArithmeticInterface接口的每一個實現類的每一個方法之前打印一句日志
*
* */
@Before("execution(public intcom.carry.spring.beans.aop.ArithmeticInterface.*(..))")
public void beforeMethod(JoinPoint joinpoint){
StringmethodName=joinpoint.getSignature().getName(); //得到當前方法的名字
Object[] args=joinpoint.getArgs(); //得到方法的參數
System.out.println("The Method:"+methodName+" begin "+Arrays.asList(args));
}
/**
* 在包 com.carry.spring.beans.aop.ArithmeticInterface接口的每一個實現類的每一個方法之后打印一句日志,無論是否異常出錯
*
* */
@After("execution(public intcom.carry.spring.beans.aop.ArithmeticInterface.*(..))")
public void afterMethod(){
System.out.println("The Method end");
}
/**
* 返回通知,在方法正常結束后執行的代碼,有異常不顯示
* 可以訪問方法的返回值
*
* */
@AfterReturning(value="execution(public intcom.carry.spring.beans.aop.ArithmeticInterface.*(..))",
returning="res")
public void returnMethod(JoinPoint joinPoint,Objectres){
String mathodName=joinPoint.getSignature().getName();
System.out.println("The Method returnMethod"+".."+mathodName+".."+res);
}
/**
* 異常通知
*
*
* */
@AfterThrowing(value="execution(public intcom.carry.spring.beans.aop.ArithmeticInterface.*(..))",
throwing="thr")
publicvoid returnMethod(JoinPoint joinPoint,Exception thr){
String mathodName=joinPoint.getSignature().getName();
System.out.println("The Method returnMethod"+".."+mathodName+".."+thr);
}
}
新聞熱點
疑難解答