Spring Statemachine中有两种Trigger,EventTrigger和TimerTrigger;

StateMachineExecutor可以说是Statemachine的入口,StateMachine对象蚩尤一个StateMachineExecutor对象,Statemachine start是,会将StateMachineExecutor一起启动(StateMachineExecutor#start()),StateMachineExecutor start时会分别启动处理TimerTrigger和EventTrigger的流程;

StateMachineExecutor有个默认的实现DefaultStateMachineExecutor,DefaultStateMachineExecutor中处理TimerTrigger是直接调用TimerTrigger的start方法(查看DefaultStateMachineExecutor#startTriggers();),TimerTrigger实现了Spring 的SmartLifecycle接口,TimerTrigger的start方法中,获取系统中配置的TaskScheduler对象,以 CountTrigger(Spring TaskScheduler框架的Trigger实现),调度TimerTrigger;

DefaultStateMachineExecutor处理EventTrigger的原理跟Quartz如出一辙,使用线程实现近乎实时的Event处理;DefaultStateMachineExecutor中处理EventTrigger的流程可以参看scheduleEventQueueProcessing方法其启动了一个线程,不停的从triggerQueue中获取Trigger并处理,transitions,triggerToTransitionMap,triggerlessTransitions;

从当前state exit,进入到目的state,并先后执行entryactions和stateAction叫做transit;

/**
* Callback interface when executor wants to handle transit.
*/
public interface StateMachineExecutorTransit<S, E> {

/**
* Called when executor wants to do a transit.
*
* @param transition the transition
* @param stateContext the state context
* @param message the message
*/
void transit(Transition<S, E> transition, StateContext<S, E> stateContext, Message<E> message);

}

StateMachineExecutorTransit的transit执行的就是上面提到的transit过程;

一个Transition蚩尤一个Guard对象,Guard#evaluate(context)方法会在执行transit之前就调用,如果评估不过,就不会执行transit(StateMachineExecutorTransit的transit方法);