@WithStateMachine с @EnableStateMachineFactory
Я пытался использовать @WithStateMachine с @StateMachineConfigEnums, и я не вижу, чтобы мои функции вызывались.
Мой код:
@Configuration
@EnableStateMachineFactory
public class StateMachineConfigEnums extends StateMachineConfigurerAdapter<String, String> {
}
@WithStateMachine
public class OrderTransitionBean {
@OnTransition(target = "RECEIVED")
void toState1() {
System.out.println("Manish toState1");
}
Может быть простой ответ, что он не поддерживается и @WithStateMachine работает только с @EnableStateMachine. Или, возможно, я что-то упустил.
Хотя другие вещи работают, как показано ниже, или действия, определенные с переходами:
public class OrderStateMachineListener extends StateMachineListenerAdapter<String, String> {
@Override
public void stateChanged(State<String, String> from, State<String, String> to) {
System.out.println("Order state changed to " + to.getId());
}
}
2 ответа
Да, вы правы в этом, это не поддерживается, так как поддержка аннотаций работает только с зарегистрированными bean-компонентами, и в этом случае bean-компонент является фабрикой конечных автоматов, а не самой машиной. Поскольку вы первый, кто запросил это, я создал для него gh-224.
Теперь это возможно для всех, кто пытается понять, как это работает. Вам нужно дать имя вашей государственной машине.
Вам необходимо указать имя для @WithStateMachine
аннотация. Пример:
@WithStateMachine(name = StateMachineNameConstants.STATE_MACHINE_NAME)
Вы также должны указать то же имя при использовании фабрики для создания конечного автомата:
stateMachine = stateMachineFactory.getStateMachine(StateMachineNameConstants.STATE_MACHINE_NAME);
Если вы используете Enums вместо строк, то вместо @OnTransition создайте аннотацию с именем @StateonTransition (обратитесь к официальному сайту автомата весеннего состояния).