0

我有一个从 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 配方,并且坚持实际上是坚持选择状态而不是实际的终端状态。

4

1 回答 1

0

开发人员在这个相关的 github 票证中解决了这个问题:

https://github.com/spring-projects/spring-statemachine/issues/266

于 2016-11-09T22:13:35.247 回答