Ich stoße nur auf ein Problem bei der Verwendung von Spring State Machine @WithStateMachine.Spring State Machine Annotation @WithStateMachine funktioniert nicht
@WithStateMachine nur funktionieren, wenn ich es auf innere Klasse verwenden, die in der Klasse von @EnableStateMachine announced definiert, aber wenn ich Klasse an anderer Stelle definieren, scheint es nicht funktionieren. Hier ist mein Code:
@[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");
}
}}
aber wenn ich Aktion in einem anderen Klassendatei definieren, ist es nicht
mein pom
<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>
Ich repariere es einfach, ich habe ''. Wenn bohnen lazy-init aktivieren ist, diesen Code '\t \t für (StateMachineHandler Handler: beanFactory.getBeansOfType (StateMachineHandler.class) .values ()) { \t \t \t Annotation Annotation = handler.getAnnotation(); \t \t \t Anmerkung 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) wird nicht wie erwartet verhalten. –
TimGuan
Ich habe nur Lazy-Init deaktivieren – TimGuan