在Spring中@Order注释有什么用?

Qas*_*sim 49 spring annotations spring-security

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

这是一个例子:

@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private TokenAuthenticationService tokenAuthenticationService;

}
Run Code Online (Sandbox Code Playgroud)

如果我们不使用这个注释,上面提到的类的顺序会发生什么?

Pat*_*ego 60

它用于建议执行优先级.

最高优先级的建议首先运行.数字越低,优先级越高.例如,给定两条"之前"的建议,优先级最高的建议将首先运行.

使用它的另一种方法是订购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())
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到可执行代码:https://github.com/patrikbego/spring-order-demo.git

希望这能进一步澄清它.

输出: -

马自达丰田

  • 对于自动装配集合,如果集合中的某些 bean 具有“@Order”而某些没有,会发生什么情况?没有的会自动成为“最后”吗? (2认同)
  • 我知道这是旧的,但如果一个 Bean 不包含“@Order”,而集合中的其他 bean 包含“@Order”,则它隐式具有默认值,即:“Ordered.LOWEST_PRECEDENCE”。 (2认同)

Pra*_*Jha 9

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


Sco*_*pio 6

@Order注释(以及Ordered接口)表示特定的顺序,Spring将按此顺序加载或优先处理Bean。

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

在您的特定示例中,注释不会更改类本身的任何内容。无论在何处使用此特定类,都将以最高优先级使用它(因为将其设置为“ 1”),这可能是因为在其他类中添加了其他信息,但相关信息的优先级较低。