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

时间:2015-05-19 14:44:22

标签: spring spring-security annotations

我看了一眼使用@Order注释的代码。我想知道关于Spring Security或Spring MVC这个注释的用途是什么。

以下是一个例子:

@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private TokenAuthenticationService tokenAuthenticationService;

}

如果我们不使用此注释,上述类的顺序会发生什么?

3 个答案:

答案 0 :(得分:57)

它用于建议执行优先级。

最高优先级建议首先运行。数字越低,优先级越高。例如,给出两个'之前'建议,优先级最高的建议将首先运行。

使用它的另一种方法是订购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

希望这能进一步澄清它。

<强>输出: -

马自达丰田

答案 1 :(得分:6)

@Order注释(以及Ordered接口)意味着一个特定的顺序,其中bean将被Spring加载或优先化。

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

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

答案 2 :(得分:0)

@Order Annotation指定spring容器加载bean的顺序。降低顺序(整数),优先级越高。因此,0的顺序将优先于10的顺序。同样的-100的顺序将优先于0。

相关问题