@Order注解只能放在类上,放在方法上是无法指定的,下面是测试
在pom文件中添加切面支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
创建测试注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotion {
}
创建两个测试切面
@Component
@Aspect
@Order(1)
public class AopOne {
@Around("@annotation(tetTestAnnotion)")
public Object one(ProceedingJoinPoint point, TestAnnotion tetTestAnnotion) throws Throwable {
Object proceed = point.proceed();
return proceed;
}
}
@Component
@Aspect
@Order(2)
public class AopTwo {
@Around("@annotation(tetTestAnnotion)")
public Object one(ProceedingJoinPoint point, TestAnnotion tetTestAnnotion) throws Throwable {
Object proceed = point.proceed();
return proceed;
}
}
创建被处理的类
@RestController
public class TestController {
@GetMapping("/")
@TestAnnotion
public String test(){
return "ok";
}
}
此时在两个测试切面打断点,就可以看出执行的先后顺序,可以通过两个测试切面上的@Order来进行调整切面的执行顺序,序号小的,就先执行,此注解放在方法上经过测试未生效