2016-10-06 3 views
1

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

я использовал следующее:

  1. осуществлять ApplicationContextAware и использовать ConfigurableApplicationContext.isActive() - это становится правдой в начале фазы инициализации контекста
  2. использование ConfigurableApplicationContext.isRunning() - это бросает исключение IllegalStateException("LifecycleProcessor not initialized...
  3. прослушивающие ContextRefreshedEvent - это не работает, потому что это внутренний компонент и используется как свойство для компонента, который реализует BeanFactoryPostProcessor
  4. внедрение SmartLifecycle также не работает, так как для внутренней фасоли

Так что это ЛЕГКО и правильный способ, чтобы определить, если контекст работает и события могут быть отправлены?

+0

Простой способ, не использовать внутренний компонент и реализовать «SmartLifecycle». Но разве реальная проблема вам не нужна, чтобы исправить тот факт, что вы отправляете события раньше? –

+0

Да - проблема с корнем заключается в том, чтобы предотвратить отправку событий слишком рано. Способ узнать, готова ли весна к событиям. –

+0

Я добавил ошибку https://jira.spring.io/browse/SPR-14783 о ContextRefreshedEvent не получен внутренними бобами, если внешний bean реализует BeanFactoryPostProcessor –

ответ

Смежные вопросы