0
스프링 스테이트 머신 @WithStateMachine을 사용할 때 문제가 발생했습니다.스프링 상태 머신 주석 @WithStateMachine이 작동하지 않습니다.
@WithStateMachine은 @EnableStateMachine에 의해 주석이 달린 클래스에서 정의 된 내부 클래스에서 사용할 때만 작동하지만 다른 클래스에서 클래스를 정의하면 작동하지 않는 것처럼 보입니다. 다음은 내 코드입니다 :
@[email protected] public class StateMachineConfig extends EnumStateMachineConfigurerAdapter<States, Events> {
@Override
public void configure(StateMachineStateConfigurer<States, Events> states)
throws Exception {
states
.withStates()
.initial(States.UNPAID)
.states(EnumSet.allOf(States.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<States, Events> transitions)
throws Exception {
transitions
.withExternal()
.source(States.UNPAID).target(States.WAITING_FOR_RECEIVE)
.event(Events.PAY)
.and()
.withExternal()
.source(States.WAITING_FOR_RECEIVE).target(States.DONE)
.event(Events.RECEIVE);
}
@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
throws Exception {
config
.withConfiguration()
.autoStartup(true);
}
@WithStateMachine
public class Action {
private Logger logger = LoggerFactory.getLogger(getClass());
@OnTransition(target = "UNPAID")
public void create() {
logger.info("UNPAID");
}
@OnTransition(source = "UNPAID", target = "WAITING_FOR_RECEIVE")
public void pay() {
logger.info("WAITING_FOR_RECEIVE");
}
@OnTransition(source = "WAITING_FOR_RECEIVE", target = "DONE")
public void receive() {
logger.info("DONE");
}
}}
하지만 난 다른 클래스 파일에서 작업을 정의 할 때,
내 치어가
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>1.2.3.RELEASE</version>
</dependency><dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
나는 그것을 고치기 위해 ''를 사용했다. 콩 - 게으른 초기화는,이 코드 (StateMachineHandler 핸들러 <주석, S, E 확장?> : beanFactory.getBeansOfType (StateMachineHandler.class) .values ())에 대한 '\t \t 가능하다 { \t \t \t 주석 주석 = handler.getAnnotation(); \t \t \t 주석 metaAnnotation = handler.getMetaAnnotation(); \t \t \t WithStateMachine withStateMachine = AnnotationUtils.findAnnotation (handler.getBeanClass() \t \t \t \t \t WithStateMachine.class); '(org.springframework.statemachine.processor.StateMachineHandlerCallHelper 83)은 예상대로 작동하지 않습니다. –
TimGuan
나는 단지 lazy-init를 비활성화했다. – TimGuan