Подтвердить что ты не робот

Какая польза от аннотации @Order в Spring?

Я просмотрел код, который использует аннотацию @Order. Я хочу знать, что такое использование этой аннотации по отношению к Spring Security или Spring MVC.

Вот пример:

@Order(1)
public class StatelessAuthenticationSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Autowired
    private TokenAuthenticationService tokenAuthenticationService;

}

Что происходит с порядком вышеописанного класса, если мы не используем эту аннотацию?

4b9b3361

Ответ 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" ), возможно, так как добавляется дополнительная, но зависимая информация в других классах, упорядоченная с меньшим приоритетом.