2016-06-22 1 views
2

스프링 상태 시스템을 사용 중이고 @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 클래스에 따라 명시 적으로 패키지의 이름을 바꿉니다이다

내 의견으로는이 두 가지 해결책 중 어느 것도 좋지 않습니다. 누구든지이 문제를 해결할 더 좋은 방법이 있습니까?

답변

관련 문제