Короткий ответ
@SpringBootApplication — основная аннотация класса запуска Spring Boot-приложения. Она является составной и объединяет три аннотации: @Configuration, @EnableAutoConfiguration и @ComponentScan.
Как это работает подробнее
Запуск выполняет метод SpringApplication.run(...): создаётся ApplicationContext, выполняется сканирование компонентов, применяется авто-конфигурация, загружаются свойства конфигурации и запускается встроенный веб-сервер. Авто-конфигурация анализирует, какие зависимости есть в classpath (какие стартеры подключены), и на их основе сама создаёт и настраивает нужные бины — например, DataSource или EntityManagerFactory.
- Составляющие аннотации:
@Configurationпомечает класс как источник бинов,@EnableAutoConfigurationвключает авто-конфигурацию, а@ComponentScanсканирует пакет главного класса и подпакеты в поисках@Component,@Service,@Repository,@Controller. - Условные аннотации —
@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnMissingBean— включают конфигурацию только при выполнении условий: нужный класс есть в classpath или бин ещё не создан. - Отключение авто-конфигурации: её можно исключить через атрибут
exclude, например@SpringBootApplication(exclude = DataSourceAutoConfiguration.class).
Пример кода
Application.java
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}