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