Что проверяет вопрос про @Order у нескольких @Bean одного типа
Вопрос звучит просто: у вас три реализации одного интерфейса, все — Spring-бины, как задать порядок, в котором они попадут в List при инъекции. Проверяют не знание аннотации, а понимание того, где именно Spring её читает.
@Order влияет на порядок элементов в коллекции при внедрении, а не на порядок создания бинов и не на порядок вызова методов жизненного цикла. Это чисто сортировка при сборке List, Set или массива зависимостей — Spring применяет AnnotationAwareOrderComparator в момент, когда собирает коллекцию для внедрения.
Если бин не аннотирован @Order и не реализует интерфейс Ordered, его порядок считается Ordered.LOWEST_PRECEDENCE — он окажется в конце, а не в случайном месте.
@Order(1) @Component class FirstHandler implements Handler { }
@Order(2) @Component class SecondHandler implements Handler { }
@Component class HandlerChain {
HandlerChain(List handlers) { this.handlers = handlers; } }
Следом обычно спрашивают: сработает ли @Order на бине, который внедряется не через List, а как одиночная зависимость через @Autowired на конкретный тип? Нет — если Spring находит единственный подходящий бин или использует @Primary, порядок вообще не участвует в выборе. @Order имеет смысл только там, где реально собирается коллекция.
Путают @Order с порядком инициализации бинов — это разные механизмы, и смешивать их на собесе дорого стоит.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки