首先,我的主要目标是说明状态机图。
方法StateMachineFactory<S, E>#getStateMachine()
构建我的stateMachine的新实例。 StateMachine<S, E>
有很多方法,例如getStates(): Collection<State<S, E>>
和getTransitions(): Collection<Transition<S,E>>
。
为了创建一个简单的状态机图,我需要所有与状态相关的状态。上面的方法getStates()
给了我所有状态,但是方法getTransitions()
并没有给我所有的态。
例如,为了理解,我的意思是。给出了以下状态机图和相应的状态机machine
:
以下方法为我提供了结果:
machine.getInitialState()
-> State_A
machine.getStates()
-> State_A
,State_B
,State_C
,State_D
,State_E
和Choice
machine.getTransitions
State_A
-> Choice
Stabe_B
-> State_D
State_C
-> State_E
如何从Choice
-> State_B
和Choice
-> State_C
中获得剩余的晶体管?
Javdoc将过渡描述为状态机与状态关联的事物。这到底是什么意思?
最后但并非最不重要的一点是,我如何在不模拟整个触发事件的情况下,遍历状态机的状态和跨状态并记录防护,转换和所有其他内容?
答案 0 :(得分:2)
这更像是3个问题,而不是一个,但是我们开始:
我如何从Choice-> State_B和 选择-> State_C吗?
如果要完全访问StateMachineConfig,则必须查看StateMachineModel
。
一种方法是定义自己的StateMachineModelVerifier,调用super(),然后从模型中读取所需内容:
@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
throws Exception {
config
.withVerifier()
.enabled(true)
.verifier(cusomVerifier());
}
@Bean
public StateMachineModelVerifier customVerifier() {
return new CustomVerifier();
}
class CustomVerifier extends DefaultStateMachineModelVerifier {
@Override
public void verify(StateMachineModel model) {
super.verify(model); // call the existing sanity check model verifier
TransitionsData<S,E> transitions = model.getTransitionsData();
}
}
通过TransitionsData
,您可以获得所有选择等。
Javdoc将过渡描述为状态机 与状态变化相关联。这到底是什么意思?
输入选择或结点实际上不会触发状态转换。 这些是伪状态,在伪状态下评估条件,SM以此为基础来决定下一步转移的位置。
例如在您的情况下,国家A->选择->国家B或国家C
可能的过渡是:
没有A->选择;选择-> B;选择-> C
最后但并非最不重要的一点,我该如何经历自己的状态和跨境 状态机并记录防护,过渡和所有其他内容 而不模拟整个触发事件?
我不太了解您的问题,但请考虑:
@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config) throws Exception {
config.withConfiguration().listener(stateChangeListener());
}
private StateMachineListenerAdapter stateChangeListener() {
return new StateMachineListenerAdapter<States, Events> () {
//Override what's necessary, but particularly
@Override
public void stateChanged(State<S,E> from, State<S,E> to) {
//logging
}
}
}
考虑使用StateMachineTestPlan
(official doc,其中包含代码示例)