Какая польза от аннотации @Order в Spring?
Я просмотрел код, который использует аннотацию @Order
. Я хочу знать, что такое использование этой аннотации по отношению к Spring Security или Spring MVC.
Вот пример:
@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private TokenAuthenticationService tokenAuthenticationService;
}
Что происходит с порядком вышеописанного класса, если мы не используем эту аннотацию?
Ответы
Ответ 1
Он используется для приоритета выполнения рекомендаций.
Сначала запускается совет с наивысшим приоритетом. Чем меньше число, тем выше приоритет. Например, учитывая две части "до" совета, первая с наивысшим приоритетом будет работать в первую очередь.
Другой способ использования - упорядочить коллекции 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 {
@Autowire
List<Car> cars;
public void printNames(String [] args) {
for(Car car : cars) {
System.out.println(car.getName())
}
}
}
Надеюсь, это еще раз пояснит это.
Ответ 2
@Order
Аннотации (а также интерфейс Ordered
) подразумевают конкретный порядок, в котором beans будет загружен или назначен приоритет Spring.
Более низкие цифры указывают на более высокий приоритет. Эта функция может быть использована для добавления beans в определенном порядке в коллекцию (то есть через @Autowired
), между прочим.
В вашем конкретном примере аннотация не изменяет ничего в самом классе. В этом случае используется этот особый класс, он используется с наивысшим приоритетом (поскольку он установлен как "1" ), возможно, так как добавляется дополнительная, но зависимая информация в других классах, упорядоченная с меньшим приоритетом.