【问题标题】:What happens if there are multiple beans having the same @Order value如果有多个具有相同 @Order 值的 bean 会发生什么
【发布时间】:2021-09-08 00:56:31
【问题描述】:

我有两个@ControllerAdvice 课程。一个在应用程序级别,另一个在依赖项中。 @ControllerAdvice 都有 @Order(Ordered.HIGHEST_PRECEDENCE) 注释。 将(首先)拾取哪个 bean 进行创建?

应用程序内的控制器建议:

package com.package.one.errors

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ControllerAdvice1 {}

来自依赖的控制器建议:

package com.package.two.errors

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ControllerAdvice2 {}

当我运行 Spring Boot 应用程序时,正在使用 ControllerAdvice1。我怀疑这与扫描时首先遇到的 bean 有关,因为@SpringBootApplication 的类与ControllerAdvice1 在同一个包内。我想知道 Spring 如何解决这个问题的规则。

【问题讨论】:

    标签: java spring aop


    【解决方案1】:

    来自 API 参考:Ordered.getOrder()

    相同的顺序值将导致任意排序位置 受影响的对象

    还有

    实际顺序可以解释为优先级,第一个对象(具有最低顺序值)具有 最高优先级。

    【讨论】:

      【解决方案2】:

      如果有多个组件具有相同的 order 值,Spring 会按照它们的默认出现顺序执行它们。因此,ControllerAdvice1ControllerAdvice2 将按照 Spring 的默认顺序运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2015-12-13
        • 2015-03-27
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        相关资源
        最近更新 更多