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