首页 > 解决方案 > 如何使用带有嵌套状态机的弹簧状态机

问题描述

再会,

我刚开始学习弹簧状态机。

我有以下问题我想知道如何配置使用嵌套状态机的状态机。

这如何以编程方式完成,即通过状态机生成器?

如何通过纸莎草 UML 做到这一点?

我的第二个问题是关于如何触发事件,即在到达具有嵌套状态机的状态时。事件如何成为嵌套状态机中的触发器?

我的第三个问题是如何通过触发从父状态(即引用嵌套状态机的状态)移动到父状态机中的另一个状态的事件来退出嵌套状态机。

我非常感谢您参考一些示例。

标签: springstate-machine

解决方案


在研究了 javadoc 并阅读了一些链接之后

https://github.com/spring-projects/spring-statemachine/issues/121

我想到了。

以编程方式

  1. 像往常一样为父状态机配置状态和转换

https://www.baeldung.com/spring-state-machine

按照该链接查看方法。

  1. 对于引用嵌套状态机的状态。请参阅下面的片段

……

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”的嵌套状态机即可。

一旦设置完成。您可以正常触发事件。弹簧状态机处理其余部分。


推荐阅读