spring - 如何使用带有嵌套状态机的弹簧状态机
问题描述
再会,
我刚开始学习弹簧状态机。
我有以下问题我想知道如何配置使用嵌套状态机的状态机。
这如何以编程方式完成,即通过状态机生成器?
如何通过纸莎草 UML 做到这一点?
我的第二个问题是关于如何触发事件,即在到达具有嵌套状态机的状态时。事件如何成为嵌套状态机中的触发器?
我的第三个问题是如何通过触发从父状态(即引用嵌套状态机的状态)移动到父状态机中的另一个状态的事件来退出嵌套状态机。
我非常感谢您参考一些示例。
解决方案
在研究了 javadoc 并阅读了一些链接之后
https://github.com/spring-projects/spring-statemachine/issues/121
我想到了。
以编程方式
- 像往常一样为父状态机配置状态和转换
https://www.baeldung.com/spring-state-machine
按照该链接查看方法。
- 对于引用嵌套状态机的状态。请参阅下面的片段
……
enter code here
*builder.configureStates()
.withStates()
.initial("contactList2")
.state("newContactSM", newContactSM())
.end("end1");*
……
状态“newContactSM”引用嵌套状态机。嵌套状态机定义
……
*
public StateMachine<String, String> newContactSM() throws Exception
{
logger.info(" ------ newContactSM() -------- ");
// checkCurrentFlow();
Builder<String, String> builder = StateMachineBuilder.builder();
builder.configureConfiguration().withConfiguration().machineId("newContactBTF");
logger.info(" configure states ..");
builder.configureStates()
.withStates()
.initial("newContact")
.end("end2")
.states(new HashSet<String>(Arrays.asList("otherContact"))); // (Arrays.asList("S1", "S2", "S3")));
logger.info(" states configured ! ");
........ //
}
enter code here
……
要通过 UML 执行此操作,只需确保引用状态为“newContactSM”的嵌套状态机即可。
一旦设置完成。您可以正常触发事件。弹簧状态机处理其余部分。