Spring 启动器创建选项

Spring boot starters creation options

我看到 Spring 启动项目以某种方式组织启动器,即 starters modules only have pom dependencies in them and autoconfiguration is a separate project where all pom dependencies 所有启动器已添加为可选依赖项。

这与 Apache camel 等其他一些大型项目的方法不同。他们的 starters 具有 pom 依赖项以及自动配置代码。此外,这些启动器依赖于其他内部启动器。

我的问题是 - 什么时候我们应该选择一种方法而不是另一种方法?创建 spring 启动器的最佳方法是什么?一个比另一个的 downsides/advantages 是多少?此外,为什么 spring 引导人员选择以他们所做的方式组织启动器,因为将 pom 依赖项和自动配置放在一起似乎是一种直观的方式?

这是一个很好的问题,需要考虑不同的方面。

让我们从Spring启动开始。我们不希望初学者以任何方式成为强制性的。如果你想为 "web application" 制作你自己的启动器,或者如果你想自己列出依赖项("webmvc" + 你最喜欢的容器),那就这样吧。这是代码不在启动器中的主要原因,但不仅如此。另一个原因是自动配置代码可用并且可以适应您添加的库。如果将其拆分,则需要结合添加库和 "right" 自动配置模块。后者很容易忘记。

现在是第三方。我不能代表 Camel,但将自动配置代码与启动器分开归结为您自动配置的代码是否可以适应可选的依赖项。如果您的用例是关于自动配置库 "acme" 并且它没有任何可选功能,那么只拥有一个模块并完成它会更自然。如果您开始在启动器中添加可选依赖项,您可能需要重新考虑。

如果"acme"有多种风格、选项或可选功能,那么将自动配置分开会更好。这让其他人可以使用自动配置模块和他们的选项制作他们自己的启动器。在你这边,你可以制作 "one starter" 来提供你想要推广的选项。有点像我们对 spring-boot-starter-web 所做的,将 Tomcat 作为默认容器。