我正在编写自定义方面处理方法调用时间测量的注解。我不确定没有人会为相同的注释实现他的自定义方面。但我想确保我的方面将是注释处理顺序中的最后一个,以实现最准确的时间测量。
如果我自己将两个方面放在@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 <- Class4
或Class1 <- Class2 <- Class4 <- Class3
因此,如果您真的希望注释位于最后,则不应实现Ordered
接口,也不应具有Order
注释。但是,如前所述,如果其他Aspect也满足相同的执行标准,并且它们既没有Order
注释也没有实现Ordered
注释,那么这也会有问题。
关于java - 无法使Spring方面的顺序最低,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61910710/