【问题标题】:Spring state machine skips initial statesSpring 状态机跳过初始状态
【发布时间】:2018-05-14 08:01:55
【问题描述】:

我对 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),它指出“规范提到机器应该总是进入它的初始状态,但是如果用户想直接进入一个状态,这有点尴尬。 submachine。”,但是根据我对状态机思想的理解,如果您不通过初始状态,那是完全有意义的,为什么您根本需要状态层次结构,您可以在同一级别定义所有内容,在我看来,初始状态应该准备同一地区其他国家的工作环境。所以我认为不应该跳过初始状态,或者在最坏的情况下,这种行为应该是可选的。

【问题讨论】:

    标签: java spring spring-statemachine


    【解决方案1】:

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

    如果您需要在 S3S2 之前做一些初始化逻辑,那么您可以尝试在其父状态 S3 中将其作为 entry action .如果您确实从 S2 过渡到 S3S2,请按顺序,退出 S2,进入 S3,进入S3S2。

    【讨论】:

    • 我在进入操作方面有不同的问题,有一些对异步外部系统的调用,我必须等待答案才能继续进行,我还需要能够中断这些调用,但我抓住了一旦我调用 Thread.sleep(),就会出现 InterruptedException。
    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多