如何订购@Aspect

时间:2018-05-18 08:09:21

标签: spring spring-aop

在使用大量@Aspect

的(Spring启动)应用程序中
  1. 您如何确保使用@Order进行正确的方面排序,因为您知道您无法定义排序的中心位置,因为这些方面可能位于不同应用程序使用的不同库中?

  2. 您如何列出应用程序上下文中存在的所有@Aspect及其订单?

  3. 在单独的@DeclarePrecedence中使用@Aspect以确保此类用例的排序而不是@Order是否有意义?

1 个答案:

答案 0 :(得分:0)

我不是Spring用户,但AFAIK @DeclarePrecedence未在Spring AOP中实现,它只影响纯粹的AspectJ方面,即如果你将LTW与AspectJ一起使用它会起作用,否则你会被{{1加上@OrderOrdered.LOWEST_PRECEDENCE之类的特殊值。

IMO如果您遇到方面优先级问题,您的设计就会出现问题。一个方面应该实现跨领域的关注并独立于其他方面。当然,每条规则都有例外,但这些只会影响一个图书馆的某些方面,这些方面有时可能是相互依存的。来自不同库的方面不应对订单做出任何假设。因此,如果这是您的代码库中的真正问题,而不仅仅是理论问题 - 去重构!