Spring状态机跳过初始状态

时间:2018-05-14 08:01:56

标签: java spring spring-statemachine

我遇到了Spring状态机的问题:

我有州的等级,让它像这样:

{
    S1 - initial
    S2
    S3 {
        S3S1 - initial
        S3S2
    }
}

目前我处于S2状态,想要转移到S3S2,我的假设是在这个过渡期间应该调用初始状态动作,但它并没有。例如,S3表示使用某个模态窗口,在状态S3S1中我应初始化此窗口,然后在S3S2中我可以使用此窗口内的一些控件,目前我无法通过定义单个转换来实现此目的S2到S3S2(如果我错了,请纠正我。)

我在github中发现了这个非常古老的问题#71(https://github.com/spring-projects/spring-statemachine/issues/71),它声明" Spec提到机器应该总是进入其初始状态但是如果用户想要直接进入这有点尴尬进入一个冲锋枪的状态。但是在我对国家机器理念的理解中,如果你不通过初始状态,你完全有理由为什么你需要状态层次,你可以在同样的水平,在我看来,初始状态应该为同一地区的其他国家的环境做好准备。所以我不认为应该跳过初始状态,或者在最坏的情况下,这种行为应该是可选的。

1 个答案:

答案 0 :(得分:0)

uml规范的某些部分提到复合状态是通过其初始状态进入的,但是措辞有点误导,因为它指的是转换终止于特定复合状态本身,并且在该初始状态之后(又名<使用em>默认条目)。直接转换到其他子状态称为显式条目。还可以通过入口点控制进入,这是进入子机器的另一种方式。

如果您需要在 S3S2 之前执行一些初始化逻辑,那么您可以尝试在其父状态 S3 中将其作为条目操作执行。如果您确实从 S2 过渡到 S3S2 ,请订购正在发生的事情,退出S2 进入S3 输入S3S2