Ответ
Spring Boot определяет стартеры по их структуре и метаданным, которые активируют механизм автоконфигурации.
Основные отличия стартера:
- Специальный артефакт: Имя стартера следует шаблону
spring-boot-starter-*(например,spring-boot-starter-web). - Метаданные автоконфигурации: Ключевой файл
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsвнутри JAR-файла стартера. В нем перечислены классы автоматической конфигурации (@Configuration), которые должны быть загружены при определенных условиях (проверяемых через@Conditionalаннотации). - Набор зависимостей: Стартер — это, по сути,
pom.xml, который агрегирует все необходимые для конкретной функциональности транзитивные зависимости (например, стартерwebвключает Tomcat, Spring MVC, Jackson).
Пример pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Что происходит при запуске:
- Spring Boot сканирует classpath.
- Находит все файлы
AutoConfiguration.importsв подключенных стартерах. - Загружает и оценивает указанные в них классы конфигурации на основе условий (
@ConditionalOnClass,@ConditionalOnPropertyи т.д.). - Применяет только те конфигурации, условия которых выполнены.
Обычный JAR не содержит файла AutoConfiguration.imports, поэтому Spring Boot не применяет для него автоматическую настройку.