【问题标题】:What is the use of @Order annotation in Spring?Spring中@Order注解有什么用?
【发布时间】:2015-07-31 11:23:03
【问题描述】:

我看到了使用@Order 注释的代码。我想知道这个注解对于 Spring Security 或 Spring MVC 有什么用处。

这是一个例子:

@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private TokenAuthenticationService tokenAuthenticationService;

}

如果我们不使用这个注解,上述类的顺序会怎样?

【问题讨论】:

标签: spring spring-security annotations


【解决方案1】:

用于Advice执行优先级。

最高优先级的建议首先运行。数字越小,优先级越高。例如,给定两条“之前”建议,优先级最高的一条将首先运行。

使用它的另一种方式是订购 Autowired 集合

@Component
@Order(2)
class Toyota extends Car {
    public String getName() {
        return "Toyota";
    }
}

@Component
@Order(1)
class Mazda extends Car {
    public String getName() {
        return "Mazda";
    }
}

@Component
public class Cars {
    @Autowired
    List<Car> cars;

    public void printNames(String [] args) {

        for(Car car : cars) {
            System.out.println(car.getName())
        }
    }
}

你可以在这里找到可执行代码:https://github.com/patrikbego/spring-order-demo.git

希望这能进一步澄清它。

输出:-

马自达丰田

【讨论】:

  • 这个可以用来指定销毁不同bean的顺序吗?
  • 我不明白为什么不这样做。
  • 关于自动装配集合,如果集合中的一些 bean 有 @Order 而有些没有,会发生什么?那些没有自动成为“最后”的人吗?
  • 我知道这是旧的,但如果一个 Bean 不包含 @Order 而集合中的其他 bean 包含,它隐含地具有默认值,即:Ordered.LOWEST_PRECEDENCE
【解决方案2】:

较低的数字表示较高的优先级。该功能可用于以特定顺序将 bean 添加到集合中(即通过@Autowired)等等。

在您的具体示例中,注释不会更改类本身的任何内容。无论在哪里使用这个特定的类,它都以最高优先级使用(因为它被设置为“1”),可能是因为附加的,但取决于信息被添加到其他类中,以较低的优先级排序。

【讨论】:

    【解决方案3】:

    @Order注解指定spring容器加载bean的顺序。顺序(整数)越低,优先级越高。因此,0 的顺序将比 10 的顺序具有更多的优先级。同样,-100 的顺序将具有比 0 更多的优先级。

    【讨论】:

      猜你喜欢
      • 2018-08-23
      • 1970-01-01
      • 2019-01-08
      • 2020-03-06
      • 2019-11-03
      • 2019-02-16
      • 2011-04-05
      • 2020-03-19
      • 2011-10-13
      相关资源
      最近更新 更多