1 回答
TA贡献1772条经验 获得超6个赞
最后,我设法让它发挥作用。您的问题是 Spring DI 机制。您试图使用@WithStateMachine来启用转换侦听器,但随后您正在使用.getMachine()来创建机器对象。它不会那样工作,您需要决定是否要使用 Spring Context。我已经使用上下文创建了一个解决方案,但您也可以保留它并仅使用手动构建器,但是您需要更改您的侦听器以使用手动方法而不是 Spring 上下文注释。
将您的主类更改为:
public class App {
public static void main(String[] args) {
ConfigurableApplicationContext context = new AnnotationConfigApplicationContext("machine");
final StateMachine<States, Events> stateMachine = context.getBean(StateMachine.class);
stateMachine.start();
System.out.println(stateMachine.getState()); // ObjectState [getIds()=[STAY]
stateMachine.sendEvent(Events.CLOSE_DOOR);
System.out.println(stateMachine.getState()); // ObjectState [getIds()=[CLOSED_DOOR]
stateMachine.sendEvent(Events.MOVE);
System.out.println(stateMachine.getState()); // ObjectState [getIds()=[GOING]
}
}
让我知道它是否适合您以及您是否理解它。
添加回答
举报