有没有理由不将小型弹簧启动器与自动配置放在一起?

时间:2015-03-12 22:07:26

标签: spring-boot

spring-boot使用" starters"定义项目可能包含的一组库依赖项。这个maven模块,泽西岛的首发,例如:
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters/spring-boot-starter-jersey

spring-boot使用autoconfigures来实例化和配置启动器模块中的类。泽西岛的自动配置:
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyAutoConfiguration.java

有没有理由不在与自动配置相同的模块中共同定位新的第三方/私人启动器,而不是像上面的例子那样分开单独的模块?

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题,而且我们在Spring Boot工程团队中一直没有讨论,所以没有正确的答案。相关讨论要点:

  • spring-boot-autoconfigure最初只是一个很小的库(1.0之前的版本)。它现在已经发展到它的pom有点可笑的长度(几乎所有东西都是可选的)。

  • 启动器执行多个功能,因为它们可用于激活自动配置位,但也(更重要的是) ,它们是一组固定的,策划的依赖项,可能(通常确实)超出激活某些自动配置所需的最小值。这基本上是马滕的观点。

  • Spring Boot .NEXT(此时为1.3)很可能会将spring-boot-autoconfigure拆分为多个模块(例如,可能有一个用于jetty,或者一个用于servlet容器,或者esle)。

当分拆发生时,我们可能会看到一些初学者已经过时(谁知道此时),但我怀疑他们仍然会存在。例如,Spring Cloud有很多非捆绑式自动配置,但仍然有启动器。

对于小型第三方库,我认为没有理由不应该将启动器和自动配置放在一起。我认为在stackoverflow上允许这个线程的唯一理由是它是否可以重新措辞以使问题更加明显。