定义你的状态
public enum OrederStates {
NEW, PAID, PACKAGED; // etc
}
然后定义你的事件
public enum OrderEvents {
PAYMENT, PACK, DELIVER; // etc
}
然后声明你的事件监听器
@WithStateMachine
public class OrderEventHandler {
@Autowired
OrderService orderService;
@OnTransition(src= "NEW",target = "PAID")
handlePayment() {
// Your code orderService.*
// ..
}
// Other handlers
}
现在将您的应用程序配置为使用状态机
@Configuration
@EnableStateMachine
static class Config1 extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(OrderStates.NEW)
.states(EnumSet.allOf(OrderStates.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(OrderStates.NEW).target(OrderStates.PAID)
.event(OrderEvents.PAYMENT)
.and()
.withExternal()
.source(OrderStates.PAID).target(OrderStates.PACKED)
.event(OrderEvents.PACK);
}
}
最后在您的应用程序/控制器中使用它
public class MyApp {
@Autowired
StateMachine<States, Events> stateMachine;
void doSignals() {
stateMachine.start();
stateMachine.sendEvent(OrderEvents.PAYMENT);
stateMachine.sendEvent(Events.PACK);
}
}
使用本指南开始使用状态机,并使用本参考资料了解更多信息。