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

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

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


它运作良好。

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

最佳答案

春季有一些关于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注释,那么这也会有问题。

关于java - 无法使Spring方面的顺序最低,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61910710/

10-12 19:34