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