- 声明一个AOP拦截器需要在当前对象上面添加
@Aspect @Component
注解,看了 Aspect 注解的定义就可以知道,它里面没有Bean的定义。
- 使用的时候需要配置类上增加
@EnableAspectJAutoProxy
注解。
- 执行方法的顺序
Around_a->Before->目标方法->AfterReturning->After->Around_b
- 使用Aop的步骤
- 定义 Aspect 定义切面
- 定义 Pointcut 就是定义我们切入点
- 定义具体通知
@Aspect
@Component
public class MyAspect {
@Pointcut("execution(* com.springboot.controller..*.*(..))")
public void cutPoint() {
//@Pointcut 定义切入点
}
@Before("cutPoint()")
public void aopBefore() {
//@Before 前置通知:目标方法之前执行
System.out.println("Before");
}
@After("cutPoint()")
public void aopAfter() {
//@After 后置通知:目标方法之后执行(始终执行)
System.out.println("After");
}
@AfterReturning("cutPoint()")
public void aopAfterReturn() {
//@AfterReturning 返回之后通知:执行方法结束之前执行(异常不执行)
System.out.println("AfterReturning");
}
@AfterThrowing("cutPoint()")
public void aopAfterThrowing() {
//@AfterThrowing 异常通知:出香异常后执行
System.out.println("AfterThrowing");
}
@Around("cutPoint()")
public Object divAround(ProceedingJoinPoint point) throws Throwable {
//@Around 环绕通知:环绕目标方法执行
System.out.println("Around_a");
Object proceed = point.proceed();
System.out.println("Around_b");
return proceed;
}
}