前言

状态机的概念很可能比任何读者都古老 并且绝对比 Java 语言本身。有限自动机的描述可以追溯到 1943 年 当绅士 Warren McCulloch 和 Walter Pitts 写了一篇关于 它。后来,George H. Mealy 提出了一个状态机概念(称为 1955 年的“Mealy Machine”)。一年后,即 1956 年,爱德华 F. Moore 提交了另一篇论文,其中他描述了所谓的 一台“摩尔机器”。如果 你读过任何关于状态机的东西,比如 Mealy 和 Moore 的名字, 应该在某个时候出现。spring-doc.cn

此参考文档包含以下部分:spring-doc.cn

Introduction 包含对本参考文档的介绍。spring-doc.cn

使用 Spring Statemachine 描述了 Spring Statemachine (SSM) 的用法。spring-doc.cn

状态机示例包含更详细的状态机示例。spring-doc.cn

FAQ 包含常见问题。spring-doc.cn

附录 包含有关所用材料和状态机的一般信息。spring-doc.cn

介绍

Spring Statemachine (SSM) 是一个框架,它允许应用程序开发人员 将传统的状态机概念用于 Spring 应用程序。SSM 提供以下功能:spring-doc.cn

在继续之前,我们建议您阅读附录 词汇表状态机 速成课程 来大致了解什么是状态机。 本文档的其余部分希望您 熟悉状态机概念。spring-doc.cn

1. 背景

状态机之所以强大,是因为它们的行为始终是 由于操作方式不同,一致性和相对容易调试 规则在机器启动时是一成不变的。这个想法是,您的 应用程序现在处于并且可能存在于有限数量的状态中。然后是一些事情 将应用程序从一个状态带到另一个状态。 状态机由触发器驱动,触发器基于 事件或计时器。spring-doc.cn

在 应用程序,然后与各种 不同的方式。您可以通过以下方式与状态机交互 发送事件、监听状态机做什么或请求 当前状态。spring-doc.cn

传统上,状态机会在 开发人员意识到代码库开始看起来像一个板子 满满的意大利面。意大利面条式代码看起来像一个永无止境的分层代码 IF、ELSE 和 BREAK 子句的结构,编译器可能应该 当事情开始看起来太复杂时,让开发人员回家。spring-doc.cn

2. 使用场景

在以下情况下,项目非常适合使用状态机:spring-doc.cn

  • 您可以将应用程序或其结构的一部分表示为状态。spring-doc.cn

  • 您希望将复杂的 logic 拆分为更小的可管理任务。spring-doc.cn

  • 应用程序已经遇到并发问题(例如) 异步发生的事情。spring-doc.cn

当您执行以下操作时,您已经在尝试实现状态机:spring-doc.cn

  • 使用布尔标志或枚举对情况进行建模。spring-doc.cn

  • 具有仅对 应用程序生命周期。spring-doc.cn

  • 遍历一个 if-else 结构(或者更糟糕的是,多个这样的结构), 检查特定标志或 enum 的 County 设置,然后进一步例外,确定 flags 和 enum 的组合存在或不存在。spring-doc.cn