我看了一眼使用@Order
注释的代码。我想知道关于Spring Security或Spring MVC这个注释的用途是什么。
以下是一个例子:
@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private TokenAuthenticationService tokenAuthenticationService;
}
如果我们不使用此注释,上述类的顺序会发生什么?
答案 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。