1

我试图将@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());
    }
}
4

3 回答 3

1

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

于 2016-05-13T08:20:25.063 回答
1

对于其他试图弄清楚如何进行这项工作的人来说,这现在是可能的。您需要为您的状态机命名。

您需要为@WithStateMachine注释提供名称。前任:

@WithStateMachine(name = StateMachineNameConstants.STATE_MACHINE_NAME)

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

stateMachine = stateMachineFactory.getStateMachine(StateMachineNameConstants.STATE_MACHINE_NAME);

于 2019-06-19T22:56:16.670 回答
0

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

于 2016-05-13T07:46:22.137 回答