Spring State Machine同状态同事件下内外部转换触发条件问询
问题结论
默认配置下不会触发状态跳转至State2,仅在满足特定条件时才会发生跳转,具体规则如下:
Spring State Machine 转换优先级规则
Spring State Machine中同一事件匹配到多个转换时,按转换的order属性值决定优先级,值越小优先级越高:
- 内部转换默认
order=0,外部转换默认order=1,因此默认内部转换优先级高于外部转换 - 优先级高的转换匹配成功后,会直接执行对应逻辑,不再尝试匹配优先级更低的转换
你当前配置的执行逻辑
你给出的配置中,State1 + Event1对应的内部转换没有配置Guard,默认始终匹配成功,因此触发Event1时:
- 永远优先匹配内部转换,仅执行
action1() - 不管外部转换的
Guard1()返回值是true还是false,都不会触发外部转换,自然不会跳转至State2
可以触发跳转至State2的两类场景
只有当内部转换无法匹配时,才会尝试匹配外部转换,满足以下任意一种情况时会发生跳转:
- 给内部转换也添加Guard,且触发
Event1时,内部转换的Guard返回false,同时Guard1()返回true - 显式修改两个转换的优先级,将外部转换的
order值设置为小于内部转换的order值,且触发Event1时Guard1()返回true
内容的提问来源于stack exchange,提问作者Kunal
相关产品推荐
相关产品推荐

