Spring 如何订购@Aspect

Spring 如何订购@Aspect,spring,spring-aop,Spring,Spring Aop,在(Spring boot)应用程序中,使用大量的@Aspect 您如何确保使用@Order进行正确的方面排序,因为这些方面可能位于不同应用程序使用的不同lib中,因此您无法在中心位置定义排序 您如何列出应用程序上下文中存在的所有@Aspect,以及它们的顺序 在单独的@Aspect中使用@declarepreceidence来确保这种用例的顺序而不是@Order有意义吗 我不是Spring用户,但是在Spring AOP中没有实现AFAIK@declareReceidence,它只影响纯Asp

在(Spring boot)应用程序中,使用大量的
@Aspect

  • 您如何确保使用
    @Order
    进行正确的方面排序,因为这些方面可能位于不同应用程序使用的不同lib中,因此您无法在中心位置定义排序

  • 您如何列出应用程序上下文中存在的所有
    @Aspect
    ,以及它们的顺序

  • 在单独的
    @Aspect
    中使用
    @declarepreceidence
    来确保这种用例的顺序而不是
    @Order
    有意义吗


  • 我不是Spring用户,但是在Spring AOP中没有实现AFAIK
    @declareReceidence
    ,它只影响纯AspectJ方面,也就是说,如果您将LTW与AspectJ一起使用,它会工作,否则,您只能使用
    @Order
    加上特殊值,如
    排序。最低优先级
    排序。最高优先级


    依我看,如果你在方面优先方面遇到问题,你的设计就是有缺陷的。一个方面应该实现一个横切的关注点,并且独立于其他方面。当然,每一条规则都有例外,但这些例外只会影响一个库中有时可能相互依赖的方面。来自不同LIB的方面不应对订单进行任何假设。因此,如果这是您的代码库中的一个真正问题,而不仅仅是一个理论问题-去重构吧

    我不清楚spring AOP是否尊重
    @declareReceidence
    ,请看我的问题是,您可以在单独的lib中处理交叉关注点,例如,如果您有一个专门的lib处理分布式跟踪,另一个处理事务,如何确保先执行哪一个?为什么这会成为一个问题?跟踪和事务处理不应相互影响。但是,只要LIB是在同一家公司开发的,并且如果您真的认为需要,您可以就每个库的数量范围达成一致,在全球范围内澄清哪些LIB应该比其他LIB更优先。不过,我仍然认为这是个坏主意。如果人们开始依赖它,您将得到糟糕的相互依赖性,因为如果有人开始重构方面库,事情就会破裂。