【spring statemachine】Using Actions

参考文档链接

Using Actions (使用操作)

从用户角度来看,操作是最有用的组件之一,可以与状态机进行交互和协作。动作可以在状态机的不同位置及其状态生命周期中执行,例如进入或退出状态或转换期间。

@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分别附加到状态的入口和出口。

@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发送到状态机。

Using StateContext

StateContext在处理状态机时是最重要的对象之一,因为它被传递到各种方法和回调中,以给出状态机的当前状态以及它可能发生的情况。如果简化一点,它可以被认为是 StateContext传递的当前状态机阶段的快照。

** _ 在Spring Statemachine 1.0.xStateContext中,使用它的方式比较简单,就如何将它用作简单的东西而言POJO。_ **

** 从开始Spring Statemachine 1.1.x它的作用已经使其成为一个状态机中的头等公民有了很大的提高 。 **

在整体StateContext中可以用作。

  • 访问最新的Message,Event或他们 MessageHeaders如果知道。
  • 访问状态机Extended State。
  • 访问StateMachine自己。
  • 访问可能的状态机错误。
  • Transition如果适用, 访问最新版本。
  • 访问状态机可能从中进入和去往的源和目标状态。
  • Stage 访问电流。

StateContext被传入与用户likeAction和进行交互的各种组件Guard。

_ 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应用程序上下文事件,要么直接将侦听器附加到状态机。这些基本上都会提供相同的信息,其中一个通过监听器接口将事件生成为事件类和其他生成回调。这两者都有优点和缺点,将在稍后讨论。_

扫描二维码关注公众号,回复: 108855 查看本文章

猜你喜欢

转载自my.oschina.net/cqyj/blog/1806658