Spring状态机-待整理

第一个是 State ,状态。一个状态机至少要包含两个状态。例如上面自动门的例子,有 open 和 closed 两个状态。
第二个是 Event ,事件。事件就是执行某个操作的触发条件或者口令。对于自动门,“按下开门按钮”就是一个事件。
第三个是 Action ,动作。事件发生以后要执行动作。例如事件是“按开门按钮”,动作是“开门”。编程的时候,一个 Action一般就对应一个函数。
第四个是 Transition ,变换。也就是从一个状态变化为另一个状态。例如“开门过程”就是一个变换。

六种元素:起始、终止、现态、次态(目标状态)、动作、条件

以订单为例:以从待支付状态转换为待发货状态为例

WAIT_PAYMENT(1, “待支付”),
WAIT_DELIVER(2, “待发货”),
WAIT_RECEIVE(3, “待收货”),
FINISH(4, “已完成”);

PAYED, 支付
DELIVERY, 发货
RECEIVED; 确认收货

待支付-》待发货 PAYED
待发货-》待收货 DELIVERY
待收货-》已完成 RECEIVED

/**

  • 配置状态
  • @param states
  • @throws Exception
    */
    public void configure(StateMachineStateConfigurer states) throws Exception {
    states.withStates()
    .initial(OrderStatus.WAIT_PAYMENT) 初始状态
    .states(EnumSet.allOf(OrderStatus.class));
    }

/**

  • 配置状态转换事件关系
  • @param transitions
  • @throws Exception
    */
    public void configure(StateMachineTransitionConfigurer transitions) throws Exception {
    transitions
    //支付事件:待支付-》待发货
    .withExternal().source(OrderStatus.WAIT_PAYMENT).target(OrderStatus.WAIT_DELIVER).event(OrderStatusChangeEvent.PAYED)
    .and()
    //发货事件:待发货-》待收货
    .withExternal().source(OrderStatus.WAIT_DELIVER).target(OrderStatus.WAIT_RECEIVE).event(OrderStatusChangeEvent.DELIVERY)
    .and()
    //收货事件:待收货-》已完成
    .withExternal().source(OrderStatus.WAIT_RECEIVE).target(OrderStatus.FINISH).event(OrderStatusChangeEvent.RECEIVED);
    }

状态机:https://www.cnblogs.com/javastack/p/17432557.html
状态机介绍1:https://www.codetd.com/article/1010726
状态机介绍2:https://blog.csdn.net/u012129558/article/details/90519577

你可能感兴趣的:(spring,数据库,java)