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;
StateMachineExecutorTransit的transit执行的就是上面提到的transit过程;
一个Transition蚩尤一个Guard对象,Guard#evaluate(context)方法会在执行transit之前就调用,如果评估不过,就不会执行transit(StateMachineExecutorTransit的transit方法);