【spring statemachine】Using Actions

參考文檔連接html

Using Actions (使用操做)

從用戶角度來看,操做是最有用的組件之一,能夠與狀態機進行交互和協做。動做能夠在狀態機的不一樣位置及其狀態生命週期中執行,例如進入或退出狀態或轉換期間。spring

@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
        throws Exception {
    states
        .withStates()
            .initial(States.SI)
            .state(States.S1, action1(), action2())
            .state(States.S2, action1(), action2())
            .state(States.S3, action1(), action3());
}

上面action1action2 beans分別附加到狀態的入口和出口。express

@Bean
public Action<States, Events> action1() {
    return new Action<States, Events>() {

        @Override
        public void execute(StateContext<States, Events> context) {
        }
    };
}
@Bean
public BaseAction action2() {
    return new BaseAction();
}

@Bean
public SpelAction action3() {
    ExpressionParser parser = new SpelExpressionParser();
    return new SpelAction(
            parser.parseExpression(
                    "stateMachine.sendEvent(T(org.springframework.statemachine.docs.Events).E1)"));
}

public class BaseAction implements Action<States, Events> {

    @Override
    public void execute(StateContext<States, Events> context) {
    }
}

public class SpelAction extends SpelExpressionAction<States, Events> {

    public SpelAction(Expression expression) {
        super(expression);
    }
}

你能夠直接將Action實現爲匿名函數,或者建立本身的實現並將相應的實現定義爲bean。 在action3中,SpEL表達式用於將事件Events.E1發送到狀態機。ide

Using StateContext

StateContext在處理狀態機時是最重要的對象之一,由於它被傳遞到各類方法和回調中,以給出狀態機的當前狀態以及它可能發生的狀況。若是簡化一點,它能夠被認爲是 StateContext傳遞的當前狀態機階段的快照。函數

** _ 在Spring Statemachine 1.0.x StateContext中,使用它的方式比較簡單,就如何將它用做簡單的東西而言POJO。_ **調試

** 從開始Spring Statemachine 1.1.x它的做用已經使其成爲一個狀態機中的頭等公民有了很大的提升 。 **日誌

在總體StateContext中能夠用做。code

  • 訪問最新的Message,Event或他們 MessageHeaders若是知道。
  • 訪問狀態機Extended State。
  • 訪問StateMachine本身。
  • 訪問可能的狀態機錯誤。
  • Transition若是適用, 訪問最新版本。
  • 訪問狀態機可能從中進入和去往的源和目標狀態。
  • Stage 訪問電流。

StateContext被傳入與用戶likeAction和進行交互的各類組件Guard。htm

_ Stage 是stage狀態機當前正在與用戶交互的一個表示。目前的階段是EVENT_NOT_ACCEPTED,EXTENDED_STATE_CHANGED, STATE_CHANGED,STATE_ENTRY,STATE_EXIT,STATEMACHINE_ERROR, STATEMACHINE_START,STATEMACHINE_STOP,TRANSITION, TRANSITION_START和TRANSITION_END它看起來像那些比賽如何用戶能夠與聽衆中描述互動很是熟悉 ,有一些用例只是想知道狀態機發生了什麼,對某些事情作出反應或僅僅爲了調試目的而進行日誌記錄。SSM提供了用於添加偵聽器的接口,而後在出現各類狀態更改,動做等時提供選項以得到回調。對象

你基本上有兩個選擇,要麼聆聽Spring應用程序上下文事件,要麼直接將偵聽器附加到狀態機。這些基本上都會提供相同的信息,其中一個經過監聽器接口將事件生成爲事件類和其餘生成回調。這二者都有優勢和缺點,將在稍後討論。_

相關文章
相關標籤/搜索