我有从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 - &gt; X_choice和X_choice中的一个 - &gt; B.这可行吗?我需要这个,因为我正在使用Persist配方,而持久化实际上是持久的Choice状态而不是实际的终端状态。
答案 0 :(得分:0)
开发人员在此相关github票证中解决了此问题:
https://github.com/spring-projects/spring-statemachine/issues/266