如何将弹簧状态机与嵌套状态机一起使用

时间:2020-10-14 12:46:18

标签: spring state-machine

美好的一天,

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

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

如何通过状态机生成器以编程方式完成此操作?

如何通过纸莎草UML完成此操作?

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

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

我非常希望能参考一些示例。

1 个答案:

答案 0 :(得分:0)

研究完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”中引用嵌套状态机即可。

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