我如何知道守卫是否拒绝了转换

Pau*_*aul 5 spring-statemachine

我按照参考文档配置了转换:

public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
        throws Exception {
    transitions
        .withExternal()
            .source(States.SI).target(States.S1)
            .event(Events.E1)
            .guard(guard1())
            .and()
        .withExternal()
            .source(States.S1).target(States.S2)
            .event(Events.E1)
            .guard(guard2())
            .and()
        .withExternal()
            .source(States.S2).target(States.S3)
            .event(Events.E2)
            .guardExpression("extendedState.variables.get('myvar')");
}
Run Code Online (Sandbox Code Playgroud)

如果状态机处于 stateStates.S1并且我发送 event Events.E1,我如何知道guard2()转换是否被拒绝?

我当前正在检查状态机的状态:如果它仍然存在,States.S1那么我知道该事件被拒绝。这是处理警卫拒绝的“正确”方法吗?

编辑:

读完詹妮的评论后,我意识到我想做的可能是对守卫的错误使用。看来防护应该仅用于确定机器应转换到哪个状态,而不是是否应进入某个状态。如果是后者,即转换被彻底拒绝,则状态机将处于无状态。我应该通过代码允许我做什么以及在编码工作流程时保持以状态机为中心的心态来提示我。这就是我在假期前匆匆忙忙得到的结果!