Spring学习 之 AOP切面执行顺序的控制
程序员文章站
2022-03-03 12:41:54
...
@Order 注释标签来控制
当有复数个切面的时候 Order(n) // n的数值越小 ,执行的优先顺就越靠前。
比如
package com.spring.apo;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Order(1)
@Aspect
@Component
public class VlidationAspect {
@Before("execution(* com.spring.apo.ArtthemticCalculator.*(..))")
public void beforeMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
System.out.println("【数据检证】前置通知方法名: " + methodName + " 方法參數為:" + Arrays.asList(args));
}
}
package com.spring.apo;
import java.util.Arrays;
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.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Order(2)
@Aspect
@Component
public class LoggingAspect {
/**
* 在com.spring.apo.ArtthemticCalculator
* 的每一個方法執行之前 執行的處理
*/
@Before("execution(public int com.spring.apo.ArtthemticCalculator.*(..))")
public void beforeMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object[] args = joinPoint.getArgs();
System.out.println("【日志出力】前置通知方法名: " + methodName + " 方法參數為:" + Arrays.asList(args));
}
}
输出结果就是
先执行数据检证,后执行日志出力。
推荐阅读
-
spring中过滤器(filter)、拦截器(interceptor)和切面(aop)的执行顺序
-
spring学习之六“AOP使用spring静态配置文件的实现”
-
Spring之重点知识 IOC(控制反转)和AOP(面向切面编程)学习小结
-
Spring面向切面编程(AOP)三之AOP的使用及配置
-
Spring框架(Framework)之IOC(控制反转)和AOP(面向切面编程)核心特性学习
-
Spring框架之Day08多切面AOP执行顺序和AOP使用场景
-
JAVAEE之Spring学习(三)---通过aop切面实现事务处理
-
JAVAEE之Spring学习(三)---aop切面(一)
-
spring之基于xml的AOP(面向切面)开发07
-
Spring-AOP @AspectJ进阶之增强织入的顺序