Получить доступ

Что на самом деле задаёт аннотация @Order на бине?

MiddleКонтейнер изнутриSpring
Ещё спрашивают так:
  • Определяет ли @Order порядок создания бинов?
Коротко

@Order задаёт порядок бинов при внедрении списком и в цепочках (фильтры, аспекты, обработчики событий), но не порядок создания — для этого @DependsOn или явная зависимость.

  • Меньшее значение — раньше; Ordered.HIGHEST_PRECEDENCE — первым
  • Работает для List<T>, ObjectProvider.orderedStream, @EventListener, аспектов
  • На @Bean-методе @Order влияет на порядок в списке, но не на создание

А ещё Для фильтров — FilterRegistrationBean.setOrder

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Различение принципиальное и часто проверяется. Внедрив List<Handler>, вы получите элементы отсортированными по @Order или по интерфейсу Ordered — на этом строятся цепочки фильтров, перехватчиков и аспектов, где порядок критичен. А вот момент создания бина определяется графом зависимостей: бин создаётся тогда, когда он кому-то понадобился. Если нужно гарантировать, что один бин инициализирован раньше другого при отсутствии прямой зависимости, применяют @DependsOn — хотя чаще это признак скрытой связи, которую лучше сделать явной. Меньшее значение @Order означает более высокий приоритет.

Что хотят услышать

  • Что упорядочивает @Order.
  • Чем задаётся порядок создания.

Частые ошибки

  • Пытаться управлять порядком инициализации через @Order.
  • Забывать, что меньшее значение означает более ранний порядок.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Порядок в коллекциях бинов и в цепочках вроде фильтров и аспектов — но не порядок создания бинов
  • ✗Порядок инициализации бинов контейнером
  • ✗Приоритет при разрешении неоднозначности внедрения
  • ✗Порядок завершения работы бинов при остановке контекста

Что спросят дальше

  • Чем @Order отличается от @Priority?
  • Почему частое использование @DependsOn — признак проблемы в дизайне?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем