스프링 상태 시스템을 사용 중이고 @WithStateMachine, @OnTransition 및 @OnStateChanged를 사용하여 전환 및 상태 변경에 기능을 추가하려는 경우 클래스를 @ 가능한 한 간단하게 EnableStateMachine을 사용하십시오. 그래도 작동하도록 만들지는 못했고 시행 착오 후에 @WithStateMachine 빈을 상태 머신 전에 만들어야하지만 그 의존성은 자동으로 해결되지 않는다는 것을 깨달았습니다.스프링 상태 기계 주석 @WithStateMachine이 잘못된 순서로 생성 될 때 작동하지 않습니다.
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와 봄 패키지 B 전에 효과 없음에 패키지 A의 모양 때문에, 따라서 상태 머신은 리스너 이전에 생성됩니다 내 프로젝트의
흥미로운 부분은 기본적으로 다음 아래로 비등 리스너 클래스의 메서드 중 하나가 상태 시스템과 연결되며 anyTransition 메서드가 호출되지 않습니다.
내가 생각할 수있는이 유일한 두 가지 솔루션
는- 는
- @DependsOn와 @EnableStateMachine 클래스를 주석 모든 @WithStateMachine 클래스에 따라 명시 적으로 패키지의 이름을 바꿉니다이다
내 의견으로는이 두 가지 해결책 중 어느 것도 좋지 않습니다. 누구든지이 문제를 해결할 더 좋은 방법이 있습니까?