Spring Statemachine StateMachineBuilder 构建一个状态为空的状态机

Spring Statemachine StateMachineBuilder builds a state machine with null state

因为我必须支持对状态机的并发访问,所以我不能使用通常的 Autowired 单例方法。相反,我正在尝试按照文档中的描述构建状态机,此处:

http://docs.spring.io/spring-statemachine/docs/1.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#state-machine-via-builder

这是我非常谦虚的代码:

    Builder<SessionState, SessionEvent> builder = StateMachineBuilder.builder();
    builder.configureStates().withStates().initial(SessionState.INITIAL).states(EnumSet.allOf(SessionState.class));
    StateMachine<SessionState, SessionEvent> stateMachine = builder.build();
    stateMachine.start();
    System.out.println(stateMachine.getState());  // null !!!

这会立即失败,因为机器的状态令人惊讶地为空,而我预计 SessionState.INITIAL。

我哪里做错了??

我也完全尝试了文档中显示的代码,即:

    Builder<String, String> builder = StateMachineBuilder.builder();
    builder.configureStates().withStates().initial("SI").end("SF").states(new HashSet<String>(Arrays.asList("S1", "S2", "S3", "S4")));
    final StateMachine<String, String> stateMachine = builder.build();
    stateMachine.start();
    System.out.println(stateMachine.getState());

...相同的结果。

这个例子是一个非常简单的想法。您需要为 config 配置转换而不是格式错误。您需要使用 builder.configureTransitions() 其中 returns 与基于注解的配置模型相同的配置接口。从 http://docs.spring.io/spring-statemachine/docs/1.0.0.M3/reference/htmlsingle/#configuring-transitions 查看操作方法。

在我的待办事项列表中添加一个配置验证程序,这样如果配置错误或不完整,您将在构建机器时快速失败。

测试中还有一些例子https://github.com/spring-projects/spring-statemachine/blob/master/spring-statemachine-core/src/test/java/org/springframework/statemachine/config/ManualBuilderTests.java