Spring AOP 实战指南:从入门到精通(3)
3.3 @PointCut:
@Aspect
@Slf4j
@Component
public class TestAspect {
@Pointcut("execution(* com.example.demo.controller.*.*(..))")
public void pt(){}
@Around("pt()")
public Object demo(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("方法执行前执行");
Object result = joinPoint.proceed();
log.info("方法执行后执行");
return result;
}
}@Slf4j
@Component
@Aspect
public class TestAspect2 {
@Before("com.example.demo.aspect.TestAspect.pt()")
public void doBefore() {
log.info("执⾏ TestAspect2 -> Before ⽅法");
}
}3.4 切面优先级 @Order:
@Slf4j
@Component
@Aspect
public class TestAspect2 {
@Pointcut("execution(* com.example.demo.controller.*.*(..))")
private void pt(){}
//前置通知
@Before("pt()")
public void doBefore() {
log.info("执行 TestAspect2 -> Before 方法");
}
//后置通知
@After("pt()")
public void doAfter() {
log.info("执行 TestAspect2 -> After 方法");
}
}
@Aspect
@Component
@Slf4j
public class TestAspect3 {
@Pointcut("execution(* com.example.demo.controller.*.*(..))")
private void pt(){}
//前置通知
@Before("pt()")
public void doBefore() {
log.info("执行 TestAspect3 -> Before 方法");
}
//后置通知
@After("pt()")
public void doAfter() {
log.info("执行 TestAspect3 -> After 方法");
}
}
@Aspect
@Component
@Slf4j
public class TestAspect4 {
@Pointcut("execution(* com.example.demo.controller.*.*(..))")
private void pt(){}
//前置通知
@Before("pt()")
public void doBefore() {
log.info("执行 TestAspect4 -> Before 方法");
}
//后置通知
@After("pt()")
public void doAfter() {
log.info("执行 TestAspect4 -> After 方法");
}
}通过上述程序的运行结果,可以看出:
存在多个切面类时,默认按照切面类的类名字母排序:
@Before 通知:字母排名靠前的先执行。
@After 通知:字母排名靠前的后执行。
但这种方式不方便管理,我们的类名更多还是具备一定含义的。
Spring 给我们提供了一个新的注解,来控制这些切面通知的执行顺序:@Order。
@Slf4j
@Component
@Aspect
@Order(10)
public class TestAspect2 {
//代码省略
}
@Aspect
@Component
@Slf4j
@Order(5)
public class TestAspect3 {
//代码省略
}
@Aspect
@Component
@Slf4j
@Order(1)
public class TestAspect4 {
//代码省略
}运行程序:


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:
《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq
想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ






