Spring 重用切入點定義表示式
阿新 • • 發佈:2018-12-25
例項如下:
這下面的各類通知方法都是引用一個類的申明
我們可以使用@Pointcut來把重複的部分放在一個方法上
//切面申明優先順序表示式
@Pointcut("execution(public int cn.com.day01.CalculatorImp.*(int, int))")
public void decale(){
}
以下有幾類情況
1、在一個類裡面
@Before("decale()") 括號裡面("方法名")
2、在一個包下面,不在一個類裡面
@Around("AspectClass.decale()")括號裡面("類名.方法名")
3'不在一個包下面
括號裡面("包名.類名.方法名")
package cn.com.day01; import java.util.Arrays; import java.util.List; 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.aspectj.lang.annotation.Pointcut; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; //切面優先順序,值越小,優先順序越高 @Order(1) @Component @Aspect public class AspectClass { // author:命運的信徒 date:2018/12/21 arm:切面 //切面申明優先順序表示式 @Pointcut("execution(public int cn.com.day01.CalculatorImp.*(int, int))") public void decale(){ } // 1.把該類加入到IOC容器中並且申明為AspectJ 切面 //@Befor的意思是在方法執行執行先執行這個 execution是執行的意思 (公共/私有/受保護 資料型別 類名.方法(引數型別 引數)) @Before("decale()") public void getLogging(JoinPoint joinpoint) { // 根據連線點獲取方法名 String methodname = joinpoint.getSignature().getName(); // 獲取引數名稱 List<Object> args = Arrays.asList(joinpoint.getArgs()); System.out.println("the method " + methodname + "is begins with " + args); } //在方法結束後執行,無論有沒有異常發生都會執行的!但是這個方法是顯示不了返回值,需要在返回通知裡顯示 @After("decale()") public void after(JoinPoint joinpoint){ String name=joinpoint.getSignature().getName(); System.out.println("the method " + name + "is end"); } //返回通知 //只有在正常執行的情況下才會執行的,這個方法可以返回結果值 @AfterReturning(value="decale()",returning="result") public void afterReturn(JoinPoint joinpoint,Object result){ String name=joinpoint.getSignature().getName(); System.out.println("the method " + name + "is end"+result); } //異常通知,只有報錯的時候才會執行的方法,可以訪問到異常 @AfterThrowing(value="decale()",throwing="ex") public void afterThrow(JoinPoint joinpoint,Exception ex){ String name=joinpoint.getSignature().getName(); System.out.println("the method " + name + "is throw error"+ex); } }