跳到主要内容

请简述Spring的Advice的执行顺序?

参考答案:

Spring的Advice执行顺序主要取决于Advice所在的Aspect以及是否继承了Ordered类。

如果多个Advice位于同一个Aspect中,那么它们的执行顺序将按照在Aspect中的声明顺序进行。然而,如果Advice位于不同的Aspect中,那么执行顺序就需要通过让Aspect继承Ordered类并覆写getOrder方法来指定。

Spring AOP中定义的基本增强有五种,分别是前置增强(BeforeAdvice),后置增强(AfterReturningAdvice),后置finally增强(AfterAdvice),抛出增强(AfterThrowingAdvice)和环绕增强(AroundAdvice)。环绕增强由于其特性,可以进一步分为环绕增强前(around before)和环绕增强后(around after),这取决于ProceedingJoinPoint调用proceed方法执行原始方法的时间点。后置增强是在return操作后执行,而抛出增强则在异常抛出时执行,因此这两者是互斥的。最后,后置finally增强是finally类型的操作,无论方法是否有异常,都会执行,并且它会在后置增强和抛出增强之前执行。

总的来说,Spring的Advice执行顺序取决于它们所在的Aspect以及是否继承了Ordered类,同时也要考虑到不同类型的Advice的特性。