package com.layne.spring.aspect.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect //表示当前POJO类为切面
public class MyAspect {
//定义前置通知方法
@Before("execution(* *..ISomeService.doSome(..))"
)
public void myBefore(){
System.out.println("执行前置通知方法myBefore"
);
}
//定义前置通知方法
@Before(value = "execution(* *..ISomeService.doSome(..))"
)
public void myBefore(JoinPoint jp){ //所有通知类型下,都有这个参数
System.out.println("执行前置通知方法 Jp="+
jp);
}
//定义前置通知方法
@AfterReturning("execution(* *..ISomeService.doSecond(..))"
)
public void afterReturning(){
System.out.println("执行后置通知方法 ``````"
);
}
//定义后置通知方法
@AfterReturning(value = "execution(* *..ISomeService.doSecond(..))",returning="result"
)
public void afterReturning(Object result){
System.out.println("执行后置通知方法 result="+
result);
}
//环绕通知方法
@Around("execution(* *..ISomeService.doThird(..))"
)
public Object MyAround(ProceedingJoinPoint pjp)
throws Throwable{
System.out.println("执行目标方法之前执行···000000"
);
Object proceed =
pjp.proceed();
String upperCase =
((String)proceed).toUpperCase();
System.out.println("执行目标方法之后执行····00000"
);
return upperCase;
}
//异常通知
@AfterThrowing(value="execution(* *..ISomeService.doSome(..))",throwing="ex"
)
public void myThrows(Exception ex){
System.out.println("执行异常通知······ex="+
ex.getMessage());
}
//最终通知
@After("doSomePointCut()"
)
public void myAfter(){
System.out.println("执行最终通知+++++++00999999999000+++++++"
);
}
//定义通知的切点
@Pointcut(value="execution(* *..ISomeService.doSome(..))"
)
private void doSomePointCut(){};
}
转载于:https://www.cnblogs.com/flytogalaxy/p/7404918.html