Spring Statemachine状态操作与转换操作

ruoxqz4g  于 2023-04-04  发布在  Spring
关注(0)|答案(2)|浏览(167)

Spring statemachine提供了以下类型的action。有人能解释一下在哪个场景中应该使用哪种类型的action吗?并且,如果action失败,那么statemachine是否会移动到下一个状态?
1.事件操作-生成事件时附加到转换的操作。
1.状态进入动作
1.状态退出动作
1.状态DoAction
我的场景是,当语句机进入S1状态时,它需要执行一些操作,如果成功,则只进入S2。它应该是状态操作还是事件操作?
S1---〉S2

5gfr0r5j

5gfr0r5j1#

1.事件操作:这是最常见的情况,您有StateA,并希望在收到EventAB时移动到StateB。如果机器处于StateA,并且您向其提交EventAB,则将触发操作。如果常规操作抛出异常,则可能(并且可选)提供错误操作来进行个人处理
1.状态进入动作:每次机器达到指定状态时,操作都会被触发。我见过有人用它来提供初始状态自定义行为
1.同上,但在每个状态出口处都会命中
1.我没有使用过这个,但是根据文档(下面的片段),它类似于状态输入(如果你提供单个操作),但是也可以使用错误操作。
关于此更新:* 我在UML规范中读到,状态do也可以用于您希望在机器处于该状态时持续发生的操作 *
需要注意的是,动作可以附加到转换(即从A到B,或从B到A),因此FROM和TO很重要,而为特定状态配置的动作不关心它来自哪里,而只与状态进入/退出相关

//Specify a state S with state behaviour Action. Currently synonym for state(Object, Action).
StateConfigurer<S, E> stateDo(S state, Action<S, E> action);

如果进入/转换操作失败(并且您没有处于选择伪状态),则机器保持相同的状态(不移动)。
对于您的场景,这取决于S1是初始状态吗?如果是,您可能需要一个状态动作。否则,S1 -〉S2之间的转换动作就可以了。

pvcm50d1

pvcm50d12#

我开始学习Spring状态机,只是想补充一点,显然状态操作与进入/退出操作的处理方式不同。
以下是参考文件的一部分:

  • 状态操作状态操作的运行方式与进入和退出操作不同,因为执行发生在进入状态之后,如果在特定操作完成之前发生状态退出,则可以取消执行。

相关问题