Какие аннотации объединяет в себе `@SpringBootApplication`?

«Какие аннотации объединяет в себе `@SpringBootApplication`?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Аннотация @SpringBootApplication — это мета-аннотация (композитная), которая объединяет функциональность трех основных аннотаций Spring:

  1. @SpringBootConfiguration (наследник @Configuration)

    • Помечает класс как класс конфигурации Spring, источник определений бинов (@Bean).
  2. @EnableAutoConfiguration

    • Включает механизм автоконфигурации Spring Boot.
    • На основе зависимостей в classpath (например, spring-boot-starter-data-jpa) автоматически настраивает соответствующие бины и свойства.
  3. @ComponentScan

    • Включает сканирование пакетов на наличие компонентов Spring.
    • Автоматически обнаруживает и регистрирует бины, помеченные как @Component, @Service, @Repository, @Controller.
    • По умолчанию сканирование начинается с пакета, содержащего класс, помеченный @SpringBootApplication.

Пример стандартного использования:

@SpringBootApplication // Эквивалентно @Configuration + @EnableAutoConfiguration + @ComponentScan
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

Важные атрибуты для переопределения поведения:

@SpringBootApplication(
    scanBasePackages = "com.mycompany.packages", // Изменить пакеты для сканирования
    exclude = {DataSourceAutoConfiguration.class} // Отключить конкретную автоконфигурацию
)
public class MyApplication { ... }