Варианты создания стартовых загрузочных пружин - PullRequest
1 голос
/ 21 апреля 2020

Я вижу, что загрузочный проект Spring определенным образом организовал стартеры, то есть стартеры модули имеют только зависимости pom, а автоконфигурация - это отдельный проект, в котором все зависимости pom всех стартеров были добавлены в качестве необязательных зависимостей.

Этот подход отличается от некоторых других крупных проектов, таких как Apache Camel. Их стартеры имеют как pom-зависимости, так и код автоконфигурации. Кроме того, у этих стартеров есть зависимость от других внутренних стартеров.

Мой вопрос - когда нам следует выбирать один подход из другого, и каков наилучший способ создания пружинных загрузчиков? Каковы недостатки / преимущества одного над другим? Кроме того, почему весенние загрузчики решили организовать стартеры так, как они делали, имея зависимости pom и автоконфигурирование вместе, кажется интуитивным способом go?

1 Ответ

3 голосов
/ 22 апреля 2020

Это очень хороший вопрос, и его необходимо учитывать.

Давайте начнем с Spring Boot. Мы не хотели, чтобы стартеры были обязательными в любом случае. Если вы хотите создать свой собственный стартер для «веб-приложения» или если вы хотите сами перечислить зависимости («web mvc» + ваш любимый контейнер), пусть будет так. Это основная причина, почему код не в стартере, а не только. Другая причина в том, что код автоконфигурации доступен и может адаптироваться к добавляемым библиотекам. Если бы это было разделено, вам понадобится комбинация добавления библиотеки + «правильный» модуль автоконфигурации. Последнее очень легко забыть.

Теперь для стороннего производителя. Я не могу говорить за Camel, но отделение кода автоконфигурации от стартера сводится к тому, может ли код, который вы автоматически конфигурируете, адаптировать к необязательным зависимостям. Если в вашем случае используется автоматическая настройка библиотеки «acme» и она не имеет каких-либо дополнительных функций, то было бы более естественно иметь только один модуль и покончить с ним. Если вы начнете добавлять дополнительные зависимости в свой стартер, вы можете захотеть пересмотреть.

Если «acme» имеет несколько разновидностей, опций или дополнительных функций, тогда было бы лучше разделить автоконфигурацию. Это позволяет другим создавать свой собственный стартер с модулем автоконфигурации и их опциями. На вашей стороне вы можете создать «один стартер», который предоставляет варианты, которые вы хотите продвигать. Немного похоже на то, что мы делаем с spring-boot-starter-web, который использует Tomcat в качестве контейнера по умолчанию.

...