无法使 Spring 方面最低阶

Can't make Spring aspect lowest order

我正在为方法调用时间测量编写自定义方面句柄注释。我不确定没有人会为同一个注释实现他的自定义方面。但我想确保我的方面将是注释处理顺序中的最后一个,以便进行最准确的时间测量。 如果我将两个方面与我自己的 @Order 规范放在一起

@Component
@Order(HIGHEST_PRECEDENCE)
@Aspect
public class Aspect1{}

@Component
@Order(LOWEST_PRECEDENCE)
@Aspect
public class Aspect2{}

效果不错。

但是,如果我仅在 Aspect2 上方指定 @Order,则顺序会中断。我不能确定任何不想处理相同注释的人会实现 Ordered 接口或指定 @Order 注释。

在 spring 中有一些关于 AOP 处理的规则。如果您没有实现 Ordered 接口或没有 Order 注释,则意味着您不关心顺序,这些方面将放在有序方面的末尾。

例如

Class1 已实施 Ordered 订单 10

Class2 具有 Order 值为 2

的注释

Class3 和 Class4 既没有 Order 注释也没有实现 Ordered 接口。在这种情况下,Class3 和 Class4 可以是任意顺序。

对于此示例,如果所有方面都满足执行条件,则它们将被称为 Class1 <- Class2 <- Class3 <- Class4Class1 <- Class2 <- Class4 <- Class3

所以如果你真的希望你的注释应该在最后,那么你不应该实现 Ordered 接口并且不应该有 Order 注释。但如前所述,如果其他方面也满足相同的执行标准并且它们既没有 Order 注释也没有实现 Ordered 注释,那么这也会有问题。