状态机拦截器在瞬态状态下触发
StateMachineInterceptor fired on transient states
我有一个从 A -> X_choice 的转换,X_choice 将转到 B 或 C。我想要一个拦截器,这样我就可以记录从 A -> B 的转换|| C. 当我尝试连接到任何可能的事件(preStateChanged 等)时,我只能得到从 A -> X_choice 的转换。从 X_choice -> B 或 X_choice 时,回调不会被触发。有什么方法可以让我轻松做到这一点吗?
@Override
public void configure(StateMachineStateConfigurer<States, Events> states) throws Exception {
states.withStates()
.initial(States.A)
.junction(States.X_choice)
.state(States.B)
.state(States.C)
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions) throws Exception {
transition
.withExternal().source(States.A).target(States.X_choice).event(Events.E).and()
.withJunction()
.source(States.X_choice)
.first(States.B, guard())
.last(States.C).and()
我有一个 StateMachinerInteceptor 定义如下:
private class PersistingStateChangeInterceptor extends StateMachineInterceptorAdapter<States, Events> {
@Override
public void preStateChange(State<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> state, Message<AppCfgBreatheAgain.Events> message, Transition<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> transition, StateMachine<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> stateMachine) {
transition.getSource(); //A
transition.getTarget(); //X_Choice
}
我想要的是:
transition.getSource(); //A
transition.getTarget(); //B
或者两个回调,一个从A -> X_choice,一个从X_choice -> B。这样可行吗?我需要这个,因为我正在使用 Persist 配方,而 persist 实际上是坚持 Choice 状态而不是实际的终端状态。
开发者在这个相关的 github 问题单中解决了这个问题:
https://github.com/spring-projects/spring-statemachine/issues/266
我有一个从 A -> X_choice 的转换,X_choice 将转到 B 或 C。我想要一个拦截器,这样我就可以记录从 A -> B 的转换|| C. 当我尝试连接到任何可能的事件(preStateChanged 等)时,我只能得到从 A -> X_choice 的转换。从 X_choice -> B 或 X_choice 时,回调不会被触发。有什么方法可以让我轻松做到这一点吗?
@Override
public void configure(StateMachineStateConfigurer<States, Events> states) throws Exception {
states.withStates()
.initial(States.A)
.junction(States.X_choice)
.state(States.B)
.state(States.C)
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions) throws Exception {
transition
.withExternal().source(States.A).target(States.X_choice).event(Events.E).and()
.withJunction()
.source(States.X_choice)
.first(States.B, guard())
.last(States.C).and()
我有一个 StateMachinerInteceptor 定义如下:
private class PersistingStateChangeInterceptor extends StateMachineInterceptorAdapter<States, Events> {
@Override
public void preStateChange(State<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> state, Message<AppCfgBreatheAgain.Events> message, Transition<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> transition, StateMachine<AppCfgBreatheAgain.States, AppCfgBreatheAgain.Events> stateMachine) {
transition.getSource(); //A
transition.getTarget(); //X_Choice
}
我想要的是:
transition.getSource(); //A
transition.getTarget(); //B
或者两个回调,一个从A -> X_choice,一个从X_choice -> B。这样可行吗?我需要这个,因为我正在使用 Persist 配方,而 persist 实际上是坚持 Choice 状态而不是实际的终端状态。
开发者在这个相关的 github 问题单中解决了这个问题:
https://github.com/spring-projects/spring-statemachine/issues/266