全部产品
云市场

模块化开发概述

更新时间:2019-11-05 15:56:11

SOFABoot 模块化开发是基于 Spring 上下文隔离的模块化。每个 SOFABoot 模块使用独立的 Spring 上下文,避免不同 SOFABoot 模块间的 BeanId 冲突。

SOFABoot 模块化开发示意图如下:
模块化开发

SOFABoot 模块

SOFABoot 模块是一个普通的 JAR 包,包含 Java 代码、Spring 配置文件、SOFABoot 模块标识等信息。一个 SOFABoot 应用可以包含多个 SOFABoot 模块,每个 SOFABoot 模块都含有独立的 Spring 上下文。

以 SOFABoot 模块为单元的模块化方式为开发者提供了以下功能:

  • 应用运行时,每个 SOFABoot 模块的 Spring 上下文互相隔离,模块间定义的 Bean 不会互相影响。
  • 每个 SOFABoot 模块功能完备且自包含,可以在不同的 SOFABoot 应用间轻松进行模块迁移和复用,只需将 SOFABoot 模块全部拷贝至目标应用,调整 Maven 依赖,即可运行。

有关 SOFABoot 模块的格式定义,详见 模块配置

SOFABoot 模块间通信

上下文隔离后,模块与模块间的 Bean 无法直接注入,模块间需要通过 SOFA 服务进行通信。目前 SOFABoot 提供以下两种形式的服务发布和引用,实现不同级别模块间的调用:

  • JVM 服务发布和引用:解决一个 SOFABoot 应用内部各个 SOFABoot 模块之间的调用问题,参考 发布和引用 JVM 服务
  • RPC 服务发布和引用:解决多个 SOFABoot 应用之间的远程调用问题,RPC 服务发布与引用

模块并行化启动

每个 SOFABoot 模块都是独立的 Spring 上下文,多个 SOFABoot 模块支持并行化启动。与 Spring Boot 的单 Spring 上下文模式相比,模块并行化启动能够加快应用的启动速度。

Root Application Context

SOFABoot 应用运行时,本身会产生一个 Spring 上下文,即 Root Application Context。它是每个 SOFABoot 模块创建的 Spring 上下文 的 Parent,可以保证每个 SOFABoot 模块的 Spring 上下文都能发现 Root Application Context 中创建的 Bean。

如此,当应用新增 Starter 时,不仅 Root Application Context 能够使用 Starter 中新增的 Bean,而且每个 SOFABoot 模块的 Spring 上下文也能使用这些 Bean。