代码之家  ›  专栏  ›  技术社区  ›  Igor Konoplyanko

弹簧靴:启动模块-我需要保留吗?

  •  0
  • Igor Konoplyanko  · 技术社区  · 6 年前

    我开始了另一个基于springboot的项目。 首先,这很明显,也很容易理解 spring-boot-starter 依赖关系。但举例来说,我的项目已经运行了2年,升级这些模块的版本变得更具挑战性和更耗时。主要是因为很多东西都是在引擎盖下自动混淆的,只有隐藏的知识可以控制它们。

    为长期支持计划新项目并能够毫无问题地升级springboot版本,最佳实践是什么?

    启动模块真的只是为了启动吗?一段时间后,它们应该被Spring框架中的纯模块完全替换掉?

    2 回复  |  直到 6 年前
        1
  •  2
  •   aweigold    6 年前

    springstarter模块的目的不一定是为了通过手动定义依赖项来替换。事实上,情况恰恰相反,因为在启动程序中定义的依赖项集经过测试可以按预期工作,因为它提供了一个自以为是的集。

    Spring Boot的模式分为两部分,自动配置模块和启动程序模块:

    • 自动配置通常不需要依赖关系(除非必要)的模块。自动配置模块将针对一个或多个模块进行编译,然后根据通常由上下文初始化时可用的库和组件所控制的规则在应用程序上下文中启用配置。这很有用,因为它提供了可以在各种场景中使用的合理的基线配置,而不必强制要求下游用户必须使用哪些特定的库/供应商。但是,由于它们旨在用于各种场景,因此作为消费者,您有责任确保您拥有有效的上下文。
    • 启动程序模块是自动配置模块的补充。它们提供了一组自以为是的下游依赖项,以及自动配置依赖项,以允许消费者开始使用。一般来说,但不一定,starter模块本身是相当空的,并且通常不包含任何类,因为它们的主要目的只是提供一个可用于传递依赖项的POM。

    尽管您的查询不是关于开发定制的自动配置,但是springboot文档 developing your own auto-configuration 很好地解释了模式。

        2
  •  2
  •   Ken Chan    6 年前

    传统上,当我们开发一个Spring应用程序时,我们需要自己包含所有必需的依赖项(Spring或其他frameworkjar)。起动器旨在使这种配置最小化。它里面没有任何代码或逻辑。您可以认为它只是一个预先定义了一些依赖关系的配置设置。由于构建系统(例如Maven)的“可传递依赖项”特性,包含starter将自动将此启动器定义的所有依赖项包含到项目中。