Ответ
Spring Boot Starter — это артефакт-зависимость, который инкапсулирует настройку и подключение определенной функциональности (например, безопасности, базы данных, веб). Он содержит:
pom.xmlс необходимыми транзитивными зависимостями.- Классы автоматической конфигурации (
@Configuration). - Файл
spring.factories/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(для Spring Boot 2.7+) для регистрации автоконфигураций.
Зачем создавать свой Starter? Для централизованного и удобного подключения вашей библиотеки или модуля в другие Spring Boot приложения.
Шаги создания собственного Starter:
-
Создайте два модуля:
autoconfigure— содержит логику автоконфигурации, аннотации,@ConfigurationProperties.starter— пустой POM-модуль, который зависит отautoconfigureи всех необходимых библиотек.
-
В модуле
autoconfigure:- Создайте класс автоконфигурации с аннотациями
@Configurationи@ConditionalOnClass/@ConditionalOnProperty.@Configuration @ConditionalOnClass(MyService.class) @EnableConfigurationProperties(MyProperties.class) public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean public MyService myService(MyProperties properties) { return new MyService(properties); } } - Зарегистрируйте его в файле
src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(одна строка с полным именем класса). - Добавьте файл
spring-configuration-metadata.jsonдля поддержки подсказок вapplication.properties.
- Создайте класс автоконфигурации с аннотациями
-
В модуле
starter:- Укажите зависимость на
autoconfigureи другие необходимые библиотеки вpom.xml.
- Укажите зависимость на
Теперь пользователи могут подключить ваш функционал, добавив одну зависимость на ваш starter.
Ответ 18+ 🔞
Слушай, а давай я тебе на пальцах объясню, что это за зверь такой — Spring Boot Starter. Представь, что ты, блядь, каждый раз собираешь походный набор: вот тебе палатка, вот спальник, вот горелка. А тут приходит какой-то умник и говорит: «На, мудила, вот тебе один рюкзак, в нём уже всё упаковано, даже спички сухие лежат». Вот этот рюкзак — он и есть стартер, ёпта!
Spring Boot Starter — это такая хитрая жопа, которая одним махом подключает к твоему проекту целую кучу всего: зависимости, настройки по умолчанию, конфигурационные классы. Чтобы ты не бегал, как угорелый, по мавен-репозиториям, собирая библиотеки по одной.
А зачем свой городить? Ну, допустим, ты написал какую-нибудь офигенную библиотеку для отправки сообщений голубиной почтой. И хочешь, чтобы другие ленивые жопы могли подключить её одной строчкой в pom.xml, а не вручную прописывать десять зависимостей и конфигурационный файл с ритуальными плясками.
Как слепить свой стартер, не облажавшись
Обычно это делают в двух модулях, чтобы не превратить всё в одно большое месиво.
-
Модуль
autoconfigure(мозги и настройки). Здесь живёт вся магия. Ты создаёшь класс, который говорит Спрингу: «Э, сабака сука, если видишь в classpath мой сервис — создавай его бин, вот по таким правилам».@Configuration @ConditionalOnClass(MyService.class) // Сработает, только если мой сервис доступен @EnableConfigurationProperties(MyProperties.class) // Подтягиваем настройки из application.yml public class MyAutoConfiguration { @Bean @ConditionalOnMissingBean // Создадим бин, только если его ещё никто не создал public MyService myService(MyProperties properties) { return new MyService(properties); // Вот он, наш красавец } }Главный фокус — нужно зарегистрировать эту автоконфигурацию. Раньше для этого был файл
spring.factories, а теперь (с Spring Boot 2.7+) нужно создать файлик:src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsИ просто написать в нём полное имя класса нашей конфигурации:com.example.my.starter.MyAutoConfigurationА ещё, чтобы в
application.propertiesподсказки были, как у взрослых, можно добавитьspring-configuration-metadata.json. Это уже высший пилотаж, для особо одарённых. -
Модуль
starter(пустышка-сборщик). Это, по сути, пустой проект. Его единственная работа — собрать в кучу все нужные зависимости. В егоpom.xmlты просто объявляешь зависимость на нашautoconfigureи, если надо, на другие библиотеки, без которых твой стартер — просто пшик.<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-awesome-autoconfigure</artifactId> <version>${project.version}</version> </dependency> <!-- Сюда можно добавить другие обязательные либы --> </dependencies>
И что в итоге? Пользователь, которому надоело всё делать руками, просто добавляет в свой проект зависимость на твой starter. И всё, блядь! Больше он ни о чём не думает. Автоконфигурация сама подхватится, бины создадутся, и его голуби уже летят с сообщениями. Красота, ёперный театр!