介绍Spring Modulith


Spring Modulith 是一个新的、实验性的 Spring 项目,它支持开发人员在代码中表达这些逻辑应用程序模块,以及构建结构良好、与领域对齐的 Spring Boot 应用程序。
传统上,应用程序框架通过提供与技术概念一致的抽象来提供结构指导,例如 Spring Framework 的构造型注释(@Controller、@Service、@Repository等)。
然而,事实证明,将焦点转移到使代码结构与领域保持一致会导致更好的结构化应用程序,这些应用程序最终更易于理解和维护。

让我们看一个具体的例子。假设我们需要开发一个电子商务应用程序,我们从两个逻辑模块开始。订单模块处理订单处理,库存跟踪我们销售的产品的库存。我们这篇文章的主要关注点是订单完成后需要更新库存的用例。我们的项目结构看起来像这样(○表示公共类型,-私有类型):

□ Example
└─ □ src/main/java
   ├─ □ example
   |  └─ ○ Application.java
   |
   ├─ □ example.inventory
   |  ├─ ○ InventoryManagement.java
   |  └─ - InventoryInternal.java
   |
   ├─ □ example.order
   |  └─ ○ OrderManagement.java
   └─ □ example.order.internal
      └─ ○ OrderInternal.java


这是一个包含Spring Boot应用类的基础包:
我们的两个业务模块由直接的子包反映:库存inventory和订单order。
库存使用了一个相当简单的安排。它只由一个包组成。因此,我们可以使用Java可见性修改器来隐藏内部组件,防止驻留在其他模块的代码访问InventoryInternal,因为Java编译器限制对非公共类型的访问。

相反,订单Order包包含一个子包,它暴露了一个Spring Bean,在我们的例子中,它需要是公共的,因为OrderManagement引用了它。在普通的Java中,包是没有层次的,一个子包不会隐藏在父包里面。
然而,Spring Modulith建立了应用模块的概念,默认由API包(直接位于应用的主包下的包--在我们的例子中是inventory和order)和可选的嵌套包(order.internal)组成。
后者被认为是内部的,驻留在这些模块中的代码不能被其他模块访问。


Spring Modulith 提供了约定的 API 来声明和验证 Spring 子应用程序中的逻辑模块。 除了上述功能之外,第一版还有更多功能来帮助开发人员构建应用程序:


详细点击标题