3.2.8. События жизненного цикла
В приложении на CUBA существуют следующие типы событий жизненного цикла:
- AppContextInitializedEvent
-  
    Посылается сразу после инициализации AppContext. В этот момент: -  Полностью инициализированы все бины, в том числе выполнены их методы @PostConstruct.
-  Можно использовать статические методы получения бинов AppBeans.get().
-  Метод AppContext.isStarted()возвращаетfalse.
-  Метод AppContext.isReady()возвращаетfalse.
 
-  
- AppContextStartedEvent
-  
    Посылается после AppContextInitializedEventи после запуска всехAppContext.Listener.applicationStarted(). В этот момент:-  Метод AppContext.isStarted()возвращаетtrue.
-  Метод AppContext.isReady()возвращаетfalse.
-  В блоке Middleware: если свойство приложения cuba.automaticDatabaseUpdate включено, все скрипты обновления БД успешно выполнены. 
 
-  
- AppContextStoppedEvent
-  
    Посылается перед остановкой приложения и после запуска всех AppContext.Listener.applicationStopped(). В этот момент:-  Все бины работоспособны и доступны через статические методы AppBeans.get().
-  Метод AppContext.isStarted()возвращаетfalse.
-  Метод AppContext.isReady()возвращаетfalse.
 
-  
Порядком исполнения слушателей можно управлять с помощью аннотации @Order. Константы Events.HIGHEST_PLATFORM_PRECEDENCE и Events.LOWEST_PLATFORM_PRECEDENCE определяют диапазон значений, используемый слушателями платформы.
Пример:
package com.company.demo.core;
import com.haulmont.cuba.core.global.Events;
import com.haulmont.cuba.core.sys.events.*;
import org.slf4j.Logger;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import javax.inject.Inject;
@Component
public class MyAppLifecycleBean {
    @Inject
    private Logger log;
    // event type is defined by annotation parameter
    @EventListener(AppContextInitializedEvent.class)
    // run after all platform listeners
    @Order(Events.LOWEST_PLATFORM_PRECEDENCE + 100)
    protected void appInitialized() {
        log.info("Initialized");
    }
    // event type is defined by method parameter
    @EventListener
    protected void appStarted(AppContextStartedEvent event) {
        log.info("Started");
    }
    @EventListener
    protected void appStopped(AppContextStoppedEvent event) {
        log.info("Stopped");
    }
}- ServletContextInitializedEvent
-  
    Посылается сразу после инициализации контекстов ServletContextи AppContext. В этот момент:-  Можно использовать статические методы получения бинов AppBeans.get().
-  Событие содержит в себе контексты, позволяющие зарегистрировать собственные сервлеты, фильтры и слушатели, см. раздел Регистрация сервлетов и фильтров. 
 
-  
- ServletContextDestroyedEvent
-  
    Посылается перед уничтожением контекстов ServletContextиAppContextи позволяет вручную освободить ресурсы.Пример использования: @Component public class MyInitializerBean { @Inject private Logger log; @EventListener public void foo(ServletContextInitializedEvent e) { log.info("Application and servlet context is initialized"); } @EventListener public void bar(ServletContextDestroyedEvent e) { log.info("Application is about to shut down, all contexts are now destroyed"); } }