spring中aop在多个切面类中的执行顺序
今天在业务中碰到了一个方法上需要使用多个自定义注解的需求。 如果注解会用到方法的返回值,这样就出现一个问题,哪个注解先执行,哪个注解后执行呢?
解决办法
加入@Order()注解。
@Component
@Aspect
@Order(20)
public class RealTimeMonitorAspaect {
}
标题编号越大的先执行完成。编号越小的先执行最后返回
Cglib代理对象实质上是目标对象的子类,类继承都会遵守线程栈的原理,先进后出。
演示demo
public class Parent {
public String run() {
System.out.println("=====Parent=======");
return "Parent";
}
}
public class ItPerson extends Parent {
@Override
public String run() {
System.out.println("=====before ItPerson=======");
String name = super.run();
System.out.println("=====after ItPerson=======");
return "ItPerson->"+name;
}
}
public class ItManagerPerson extends ItPerson {
@Override
public String run() {
System.out.println("=====before ItManagerPerson=======");
String name = super.run();
System.out.println("=====after ItManagerPerson=======");
return "ItManagerPerson->"+name;
}
}
输出结果
=====before ItManagerPerson=======
=====before ItPerson=======
=====Parent=======
=====after ItPerson=======
=====after ItManagerPerson=======
ItManagerPerson->ItPerson->Parent