Самый подробный пользовательский учебник по разработке Spring Boot Starter

Spring Boot

1. Введение

Поскольку Spring раздувается, Spring Boot родился для упрощения настройки, готовых решений и быстрой интеграции. В настоящее время он стал самым популярным фреймворком в Java. Обычно мы используем Spring Boot для разработки веб-приложений. Spring mvc по умолчанию использует контейнер сервлета tomcat, потому что компонент Spring mvc интегрирует spring-boot-starter-tomcat. Но теперь производительность контейнера сервлетов undertow очень высока. Сначала мы можем исключить кота:

Затем замените непосредственно на отлив:

Код менять не нужно. Это преимущество компонентизации: 1. Подключаемый. 2. Можно настроить. 3. Интеграция по требованию. Почему его можно быстро адаптировать? Давайте представим ситуацию: если у вас сломался винт на колесе автомобиля, вы должны купить винт и установить его самостоятельно. Вы можете пойти в магазин и просто сообщить марку и местонахождение вашей машины, и босс точно будет знать, какие винты вы хотите использовать. Это преимущество, что стандарт был разработан. Если стандарта нет, можно запросто купить неподходящие винты, и придется действовать методом проб и ошибок. Это явно не то, что вы хотите. Если этот стандарт будет незаметен, то мы будем общаться быстрее и удобнее. Иногда твоя девушка просто смотрит на тебя, и ты знаешь, что она хочет сделать. Таким образом, в Spring Boot действует правило «соглашение важнее конфигурации», которое позволяет программным компонентам уменьшить конфигурацию и сложность. Поэтому, когда вы разрабатываете собственный Spring Boot Starter, лучше всего подумать, как ваш стартер может обеспечить вышеуказанное удобство.

2. Spring Boot некоторые соглашения

Дизайн компонента должен иметь стандарты и правила. Spring Boot Starter не исключение. Давайте рассмотрим некоторые распространенные практики.

2.1 Стиль именования

Если вы собираетесь завести ребенка, вы должны поторопиться перед рождением имени. Это имя указывает на родословную вас и вашего возлюбленного, оно точно не будет фамилией соседнего старого короля и точно привлечет посторонние взгляды. В maven groupId представляет фамилию, а ArtiftId представляет имя. У Spring Boot также есть предложение по именованию. Не используйте официальный org.springframework.boot для groupId Вместо этого используйте свой собственный уникальный. Spring Boot официально рекомендует использовать неофициальный формат именования Starter для именования артефактов xxxx-spring-boot-starter , например mybatis-spring-boot-starter . Официальный стартер будет следовать за spring-boot-starter-xxxx, таким как упомянутый выше spring-boot-starter-undertow. Многие авторы начинающих с открытым исходным кодом игнорируют это соглашение, которое недостаточно «профессионально».

3. Настройте стартер

Затем мы создаем собственный сторонний стартер SMS с именем sms-spring-boot-starter. Есть некоторые детали, которые необходимо ввести во время написания. Вот шаблон, в котором отсутствуют образцы и тестовые модули:

На основании вышеизложенного мы создаем следующие проекты:

3.1 sms-spring-boot

sms-spring-boot важен для управления зависимостями проекта. Поэтому необходимо ввести спецификацию. Стартовый ключ управления всеми модулями модуля, и все зависит от стартера, даже sms-spring-boot-autoconfigure с помощью sms-spring-boot management.

3.2 sms-spring-boot-autoconfigure

Этот модуль в основном используется для определения параметров конфигурации и функций автоматической настройки (обычно это абстрактный интерфейс Spring Bean).

3.2.1 Параметры конфигурации

Общие параметры конфигурации находятся в приложении Spring Boot.yml. Мы определим идентификатор префикса в качестве параметра пространства имен, чтобы выделить каждый компонент. Соответствующий компонент определит XXXXPROPERTIES для автоматизации этих параметров. Обратите внимание, что механизм автосистемы основан на аннотации @ConfigurationProPerties, обратите внимание, что вы должны явно объявлять идентификатор префикса (префикс) вашей конфигурации. Наш SMS-Spring-Boot будет настроен следующим образом:

c997518d5e8dba9a9bb69dd23a0770d8.png

В приведенной выше конфигурации в качестве примера используется функция SMS в Alibaba Cloud.В будущем вам нужно будет только добавить конфигурацию, соответствующую SmsProperties в application.yml:

302dd03f038782022ec8cf43168620ca.png

Если вы интегрируете библиотеку проверки Spring Boot, вы также можете проверить SmsProperties. Внимательные Java-разработчики при настройке application.yml обнаружат, что конфигурация параметров имеет следующие описания параметров:

8092aac794d4b77ca959909c3af789dd.png

Так же, как и аннотация в java, нам удобно понимать роль конфигурации, собственно, это и генерируется аннотацией java. вам нужно зависеть от

8092aac794d4b77ca959909c3af789dd.png

Затем зависимость извлечет аннотации свойств члена SmsProperties для создания файла spring-configuration-metadata.json, который является файлом метаданных описания конфигурации. Spring Boot также официально накладывает некоторые правила на аннотации:

  • Не начинайте описание с «The» или «A».
  • Для логических типов начинайте описание с «Whether» или «Enable».
  • Для типов на основе коллекций используйте «список, разделенный запятыми».
  • Если единица времени по умолчанию не равна миллисекундам, используйте java.time.Duration вместо long для описания единицы по умолчанию, например, «Если не указан суффикс длительности, будут использоваться секунды».
  • Не указывайте значение по умолчанию в описании, если оно не должно быть определено во время выполнения.

Дополнение Я лично предлагаю, чтобы описание было максимально полно на английском языке.

3.2.2 Настройка интерфейса функции автоматической экспозиции

После получения конфигурации следующим шагом будет инициализация нашего функционального интерфейса в соответствии с конфигурацией.Мы абстрагируем интерфейс отправки SMS SmsSender и разработаем функцию в соответствии с SDK провайдера SMS. Обратите внимание, что зависимости модуля автоконфигурации почти всегда нетранзитивны. То есть, в зависимости от конфигурации координат, необязательное значение имеет значение true. После реализации функционального интерфейса напишем класс автоматической настройки SmsAutoConfiguration. В дополнение к аннотации @Configuration, @ConfigurationProperties поможет нам загрузить наш класс конфигурации SmsProperties. Затем объявите функциональный интерфейс, который нам нужно представить как Spring Bean, и предоставьте его приложению Spring Boot. Иногда мы также можем управлять SmsAutoConfiguration или SmsSender с помощью некоторых условий, например, загружать или загружать разные SmsSender в соответствии с определенным условием. Когда у вас есть время, вы можете посмотреть на redis-starter, и вы ясно почувствуете, что он будет создавать различные клиентские ссылки в соответствии с изменениями luttuce, redisson и jedis. Метод реализации заключается в использовании серии аннотаций @Conditional.Если у вас есть время, вы можете узнать о серии аннотаций. Наше объявление SmsAutoConfiguration выглядит следующим образом:

a9204a6d80a3df1a7e1a2ac7704c3664.png

3.2.3 Активная и пассивная эффективность

Есть два способа интегрировать стартер в приложение. У нас есть два с точки зрения приложения:

  • Один из них вступает в силу автоматически.Когда начальный компонент интегрирован в приложение Spring Boot, вам необходимо активно объявить и включить пусковой механизм, чтобы он вступил в силу, даже если вы полностью его настроите. Здесь будет использоваться аннотация @Import, и аннотация будет отмечена на вашей пользовательской аннотации @Enable:
    be07d9a2aa637b267ae9cba39b8b6064.png
    Мы можем использовать функцию SMS, пометив эту аннотацию в приложении Spring Boot.
  • Еще одно пассивное вступление в силу, которое было применено к Spring Boot при интеграции компонента STARTER. Здесь используется механизм SPI, аналогичный Java. Напишите Meta-Inf / Spring.Factory в пакете ресурсов AutoConfigure Напишите полное имя SMSAUTOCONFIGURATION.
    d3422497106918aadf5237c75f5d66ad.png

Несколько классов конфигурации разделяются запятыми, а обратная косая черта используется для разрыва строки.

3.3 sms-spring-boot-starter

Модуль представляет собой пустую банку. Его единственная цель — предоставить необходимые зависимости для использования стартера. Вы можете думать об этом как о единственной точке входа для интеграции начальных функций. Не делайте предположений о проектах, которые добавляют лаунчеры. Если для автоматически настраиваемых зависимостей часто требуются дополнительные стартеры, также укажите их. Предоставление надлежащего набора зависимостей по умолчанию может быть затруднено, если количество необязательных зависимостей велико, так как вам следует избегать включения зависимостей, которые не нужны для типичного использования библиотеки. Другими словами, вы не должны включать необязательные зависимости. В любом случае ваш стартер должен прямо или косвенно ссылаться на основной стартер Spring Boot (spring-boot-starter) (если ваш стартер зависит от другого стартера, вам не нужно его добавлять). Если проект создается только с помощью пользовательского стартера, основные функциональные возможности Spring Boot будут достигаться за счет наличия основного стартера. Наш sms-spring-boot-starter — это просто следующий pom:

5f45659e22f942fde9c31ee6103bac21.png

На данный момент разработан весь наш SMS Starter.

4. Резюме

Пользовательский стартер очень полезен для компонентизации и модульности нашего проекта. Это также важная особенность Spring Boot. Я считаю, что благодаря представлению Xiaopang вы готовы попробовать его, поэтому поторопитесь и начните писать. Если вы считаете, что это полезно для вас, ставьте лайк и подписывайтесь.

Приведенный выше демонстрационный адрес:git ee.com/Fe lord/instructions-…

关注公众号:码农小胖哥,获取更多资讯