4.2.7. 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 см. в Раздел 5.8.4, «Выполнение кода на старте приложения».

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

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

Для получения ссылок на Spring-бины используйте инжекцию или статические методы класса AppBeans.

Использование AppContext.getApplicationContext().getBean() не рекомендуется.