Ответ
Spring Boot определяет порядок создания бинов на основе их зависимостей и явных указаний. Основные механизмы:
1. Неявные зависимости через @Autowired
Если бин A зависит от бина B (через внедрение), Spring сначала создаст B.
2. Явное указание с помощью @DependsOn
Аннотация принудительно задаёт зависимости, которые должны быть созданы первыми.
@Component
@DependsOn({"databaseInitializer", "configLoader"})
public class ServiceBean {
// ...
}
3. Управление порядком в коллекциях через @Order
Влияет на порядок бинов в инжектируемых списках (например, List<Processor>), но не на порядок их создания в контексте.
4. Фазы жизненного цикла с SmartLifecycle
Бины, реализующие этот интерфейс, могут управлять порядком старта и остановки через метод getPhase() (меньшее значение — более высокий приоритет).
Почему это важно? Порядок гарантирован только для бинов с явными зависимостями. Для независимых бинов порядок создания не определён. Используйте @DependsOn для сложных сценариев инициализации, чтобы избежать ошибок NullPointerException.