我正在使用弹簧状态机,并希望使用@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 类
在我看来,这两种解决方案都不好。有没有人有更好的方法来解决这个问题?