状态机知识梳理: 先可以有个印象

什么是状态机:

一组状态,各个状态之间,依据一定的条件(如 :输入一个1  或者是 0),存在一定的转换,(从状态X转换到状态Y)它有一个起始状态和若干终结状态,从起始状态开始,根据输入的串转换状态,直到所有的输入的被状态机处理,看看最后停留的状态是否为终结状态,是,说明这个串符合这个状态机规则,或者说明这个状态被这个状态机接受!
流程可能是瞬间的动作经历很多步骤,比如“登录”流程,点击“登录”按钮之后,会有验证帐号、密码、验证码的诸多流程,但是都是在点击登录按钮的瞬间,逐一完成。
状态机表示是一个个已经完成的状态,每一个环节都是可以独立存在的

状态:

状态机知识梳理: 先可以有个印象_第1张图片

事件:

状态机知识梳理: 先可以有个印象_第2张图片

此时,共有三个状态:待支付、待收货、结束

两个引起状态迁移的事件:支付、收货

支付事件PAY会触发状态从待支付UNPAID状态到待收货WAITING_FOR_RECEIVE状态的迁移

收货事件RECEIVE会触发状态从待收货WAITING_FOR_RECEIVE状态到结束DONE状态的迁移。 

状态机配置类:初始化状态的配置、状态迁移的流程配置、事件监听配置

状态机知识梳理: 先可以有个印象_第3张图片

状态机知识梳理: 先可以有个印象_第4张图片

配置说明:

@EnableStateMachine 注解 :启用 Spring StateMachine 状态机功能

configure(StateMachineStateConfigurer states) :初始化当前状态机拥有哪些状态,initial(States.UNPAID) 定义了初始状态为 UNPAIDstates(EnumSet.allOf(States.class))指定了上一步定义的所有状态作为该状态机的状态定义。

configure(StateMachineTransitionConfigurer transitions) 初始化当前状态机有哪些状态迁移动作,包含 来源状态source,目标状态target以及触发事件event

configure(StateMachineConfigurationConfigurer config) 给当前的状态机指定状态监听器,listener() 调用了下一个内容创建的监听器实例,用于处理发生的各个状态迁移事件。

StateMachineListener listener() 创建 StateMachineListener 状态监听器的实例,该实例中会定义具体的状态迁移处理逻辑,上面的实现中只是做了一些输出,实际业务场景包含更负责的逻辑,一般情况下,将该实例的定义放到独立的类中定义,并用注入的方式进行加载。

启动:

状态机知识梳理: 先可以有个印象_第5张图片

1、run 函数定义了整个流程的处理过程,其中 start() 创建这个订单流程,订单会处于待支付状态

2、调用 sendEvent(Events.PAY) 执行支付

3、调用 sendEvent(Events.RECEIVE) 来完成收货

Spring StateMachine 小结 :

  • 定义状态和事件枚举
  • 为状态机定义使用的所有状态以及初始状态
  • 为状态机定义状态的迁移动作
  • 为状态机指定监听处理器

状态监听器

Spring StateMachine 实现状态机,代码逻辑简单并且具有层次化。状态的整个调度逻辑主要依靠配置的方式定义,所有的业务逻辑操作都被定义在了状态监听器,其实状态监听器还可以实现事件捕获等,通过查看 StateMachineListener 接口来了解它所有的事件定义:

状态机知识梳理: 先可以有个印象_第6张图片

状态机知识梳理: 先可以有个印象_第7张图片

注解方式的监听器 :

状态机知识梳理: 先可以有个印象_第8张图片

 

 

 

你可能感兴趣的:(初学者,java)