Как получить доступ к весенним данным StateMachineConfig - PullRequest
0 голосов
/ 31 января 2019

У меня есть конечный автомат с пружиной, который я настраиваю на EnumStateMachineConfigurerAdapter с пометкой @EnableStateMachineFactory

Все идет хорошо, я могу создавать конечные автоматы, используя фабрику:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MyStateMachineConfig.class);
context.refresh();
StateMachineFactory stateMachineFactory = context.getBean(StateMachineFactory.class);

Но мне нужно сделать некоторый самоанализ на конфигурации конечного автомата.По сути, я хочу получить список всех конечных состояний для моей записи.

Эта информация доступна в org.springframework.statemachine.config.StateMachineConfig, и я могу сказать при отладке, что ее экземпляр создан.Но, похоже, он не зарегистрирован как бин, и я не могу получить к нему доступ как к вызову:

context.getBean(StateMachineConfig.class);

Причины:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.statemachine.config.StateMachineConfig<?, ?>' available

1 Ответ

0 голосов
/ 15 февраля 2019

Вы можете зарегистрировать свой собственный StateMachineModelVerifier и получить доступ к данным состояний - есть открытый метод isEnd() для объекта StateData .

@Override
public void configure(StateMachineConfigurationConfigurer<States, Events> config)
        throws Exception {
    config
        .withVerifier()
            .enabled(true)
            .verifier(cusomVerifier());
}

@Bean    
public StateMachineModelVerifier customVerifier() {
  return new CustomVerifier();
}

class CustomVerifier extends DefaultStateMachineModelVerifier {
  @Override
  public void verify(StateMachineModel model) {
    super.verify(model); // call the existing sanity check model verifier
    Collection<StateData<State, Event> statesData = model.getStatesData().getStateData(); 
    //log your stuff
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...