无法使 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 <- Class4
或 Class1 <- Class2 <- Class4 <- Class3
所以如果你真的希望你的注释应该在最后,那么你不应该实现 Ordered
接口并且不应该有 Order
注释。但如前所述,如果其他方面也满足相同的执行标准并且它们既没有 Order
注释也没有实现 Ordered
注释,那么这也会有问题。
我正在为方法调用时间测量编写自定义方面句柄注释。我不确定没有人会为同一个注释实现他的自定义方面。但我想确保我的方面将是注释处理顺序中的最后一个,以便进行最准确的时间测量。
如果我将两个方面与我自己的 @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 <- Class4
或 Class1 <- Class2 <- Class4 <- Class3
所以如果你真的希望你的注释应该在最后,那么你不应该实现 Ordered
接口并且不应该有 Order
注释。但如前所述,如果其他方面也满足相同的执行标准并且它们既没有 Order
注释也没有实现 Ordered
注释,那么这也会有问题。