4.2.8. AppContext

AppContext - системный класс, в статических полях которого хранятся ссылки на некоторые общие для любого блока приложения компоненты:

  • ApplicationContext фреймворка Spring

  • Набор свойств приложения, загруженных из файлов app.properties

  • ThreadLocal переменная, хранящая экземпляры SecurityContext

  • Коллекция слушателей жизненного цикла приложения (AppContext.Listener)

AppContext инициализируется на запуске приложения классами-загрузчиками, специфичными для типа блока приложения:

  • загрузчик Middleware - AppContextLoader

  • загрузчик Web Client - WebAppContextLoader

  • загрузчик Web Portal - PortalAppContextLoader

  • загрузчик Desktop Client - DesktopAppContextLoader

AppContext может быть использован в прикладном коде для решения следующих задач:

  • Регистрации слушателей, срабатывающих после полной инициализации и перед закрытием приложения, например:

    AppContext.addListener(new AppContext.Listener() {
        @Override
        public void applicationStarted() {
            System.out.println("Application is ready");
        }
    
        @Override
        public void applicationStopped() {
            System.out.println("Application is closing");
        }
    });

    В момент вызова applicationStarted():

    • Полностью инициализированы все бины, в том числе выполнены их методы @PostConstruct.

    • Можно использовать статические методы получения бинов AppBeans.get().

    • Метод AppContext.isStarted() возвращает true.

    • Метод AppContext.isReady() возвращает false.

    • В блоке Middleware: если свойство приложения cuba.automaticDatabaseUpdate включено, все скрипты обновления БД успешно выполнены.

      В момент вызова applicationStopped():

    • Все бины работоспособны и доступны через статические методы AppBeans.get().

    • Метод AppContext.isStarted() возвращает false.

    • Метод AppContext.isReady() возвращает false.

      Практический пример использования AppContext.Listener см. в Выполнение кода на старте приложения.

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

  • Передачи SecurityContext в новые потоки выполнения, см. Аутентификация пользователей.