我正在编写自定义方面来处理方法调用时间的注释。我不确定没有人会为同一个注释实现他的自定义方面。但我想确保我的方面将是注释处理顺序中的最后一个,以实现最准确的时间测量。如果我自己用@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
注释,那么这也会有问题。