@WithStateMachine 和 @EnableStateMachineFactory

@WithStateMachine with @EnableStateMachineFactory

我试图将@WithStateMachine 与@StateMachineConfigEnums 一起使用,但我看不到我的函数被调用。

我的代码是:

@Configuration
@EnableStateMachineFactory
public class StateMachineConfigEnums extends StateMachineConfigurerAdapter<String, String> {

}
@WithStateMachine
public class OrderTransitionBean {
    @OnTransition(target = "RECEIVED")
    void toState1() {
        System.out.println("Manish toState1");
    }

可能会有一个简单的答案,它不受支持,@WithStateMachine 只能与@EnableStateMachine 一起使用。或者我可能遗漏了什么。

虽然其他的东西像下面这样工作或用转换定义的动作:

public class OrderStateMachineListener extends StateMachineListenerAdapter<String, String> {

    @Override
    public void stateChanged(State<String, String> from, State<String, String> to) {
        System.out.println("Order state changed to " + to.getId());
    }
}

如果您使用枚举而不是字符串,则创建一个名为 @StateonTransition 的注解(查看官方 spring 状态机站点)而不是 @OnTransition。

是的,您是对的,它不受支持,因为注释支持仅适用于已注册的 bean,在这种情况下,bean 是状态机工厂,而不是机器本身。由于您是第一个提出此要求的人,因此我为此创建了问题 gh-224

对于任何其他想弄清楚如何使这项工作起作用的人,现在这都是可能的。您需要为状态机命名。

您需要为 @WithStateMachine 注释提供名称。例如:

@WithStateMachine(name = StateMachineNameConstants.STATE_MACHINE_NAME)

使用工厂创建状态机时也必须指定相同的名称:

stateMachine = stateMachineFactory.getStateMachine(StateMachineNameConstants.STATE_MACHINE_NAME);