无法使Spring方面的最低顺序

问题描述 投票:0回答:1

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

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

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

效果很好。

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

java spring aspectj spring-aop
1个回答
0
投票

春季有一些关于AOP处理的规则。如果您未实现Ordered接口或没有Order批注,则表示您不关心顺序,并且这些方面放在了已排序方面的末尾。

例如

Class1已实现10订单的Ordered

Class2的Order注释具有值2

Class3和Class4既没有Order批注,也没有实现Ordered接口。在这种情况下,Class3和Class 4可以采用任何顺序。

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

因此,如果您真的希望注释位于最后,那么您不应该实现Ordered接口,也不应具有Order注释。但是,如上所述,如果其他Aspect也满足相同的执行标准,并且它们既没有Order注释,也没有实现Ordered注释,那么这也会有问题。

© www.soinside.com 2019 - 2024. All rights reserved.