2

我正在使用弹簧状态机,并希望使用@WithStateMachine、@OnTransition 和@OnStateChanged 为转换和状态更改添加功能,以使@EnableStateMachine 的类尽可能简单。我从来没有让它工作,经过一些试验和错误后,我意识到必须在状态机之前创建 @WithStateMachine bean,但这种依赖关系不会自动解决。

我的项目中有趣的部分基本上可以归结为以下几点:

package org.myorg.a

@Component
public class MyComponent {

    @Autowired
    StateMachine<States, Events> sm;

}

package org.myorg.b

@WithStateMachine
public class Listener {

    @OnTransition
    public void anyTransition() {}
}

MyComponent 和状态机将在 Listener 之前创建,因为 Spring 将在包 b 之前查看包 a,实际上,Listener 类中的任何方法都不会与状态机关联,并且永远不会调用 anyTransition 方法。

我能想到的唯一两个解决方案是

  • 重命名包
  • 使用 @DependsOn 注释 @EnableStateMachine 类并显式依赖所有 @WithStateMachine 类

在我看来,这两种解决方案都不好。有没有人有更好的方法来解决这个问题?

4

1 回答 1

0

希望这刚刚在https://github.com/spring-projects/spring-statemachine/issues/232中得到解决。

于 2016-09-30T16:20:32.640 回答