Что на самом деле задаёт аннотация @Order на бине?
- Определяет ли @Order порядок создания бинов?
@Order задаёт порядок бинов при внедрении списком и в цепочках (фильтры, аспекты, обработчики событий), но не порядок создания — для этого @DependsOn или явная зависимость.
- Меньшее значение — раньше; Ordered.HIGHEST_PRECEDENCE — первым
- Работает для List<T>, ObjectProvider.orderedStream, @EventListener, аспектов
- На @Bean-методе @Order влияет на порядок в списке, но не на создание
А ещё Для фильтров — FilterRegistrationBean.setOrder
Подробно
Различение принципиальное и часто проверяется. Внедрив List<Handler>, вы получите элементы отсортированными по @Order или по интерфейсу Ordered — на этом строятся цепочки фильтров, перехватчиков и аспектов, где порядок критичен. А вот момент создания бина определяется графом зависимостей: бин создаётся тогда, когда он кому-то понадобился. Если нужно гарантировать, что один бин инициализирован раньше другого при отсутствии прямой зависимости, применяют @DependsOn — хотя чаще это признак скрытой связи, которую лучше сделать явной. Меньшее значение @Order означает более высокий приоритет.
Что хотят услышать
- Что упорядочивает @Order.
- Чем задаётся порядок создания.
Частые ошибки
- Пытаться управлять порядком инициализации через @Order.
- Забывать, что меньшее значение означает более ранний порядок.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Порядок инициализации бинов контейнером
- ✓Порядок в коллекциях и цепочках, но не порядок создания бинов
- ✗Приоритет при разрешении неоднозначности внедрения, как у @Primary
- ✗Порядок завершения работы бинов при остановке контекста
Что спросят дальше
- Чем @Order отличается от @Priority?
- Почему частое использование @DependsOn — признак проблемы в дизайне?
Разбор темы
- Контейнер: события, FactoryBean и тонкое связывание
События приложения и @EventListener, FactoryBean, Aware-интерфейсы, порядок бинов (@Order/@DependsOn) и отложенное получение (ObjectProvider/@Lazy/@Lookup).
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.