Сообщения

Показаны сообщения с ярлыком "Spring Bean Callbacks"

Spring IoC контейнер: настройка бинов, изящное завершение работы контейнера Spring IoC в не веб-приложениях

Изображение
Этот пост относится только к не веб-приложениям. В веб-реализациях Spring ApplicationContext уже есть код, который корректно завершает работу контейнера Spring IoC при завершении работы соответствующего веб-приложения. Если вы используете IoC-контейнер Spring в среде, не являющейся веб-приложением (например, в среде рабочего стола расширенного клиента), зарегистрируйте ловушку отключения в JVM. Это гарантирует плавное завершение работы и вызывает соответствующие методы уничтожения для ваших одноэлементных компонентов, чтобы освободить все ресурсы. Вы все еще должны правильно настроить и реализовать эти обратные вызовы уничтожения. Чтобы зарегистрировать обработчик завершения работы, вызовите метод registerShutdownHook(), который объявлен в интерфейсе ConfigurableApplicationContext, как показано в следующем примере: Java import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public final class...

Spring IoC контейнер: настройка бинов, обратные вызовы при запуске и завершении работы

Изображение
Интерфейс Lifecycle определяет основные методы для любого объекта, который имеет свои собственные требования жизненного цикла (например, запуск и остановка некоторого фонового процесса): Java public interface Lifecycle { void start(); void stop(); boolean isRunning(); } Kotlin interface Lifecycle { fun start() fun stop() val isRunning: Boolean } Любой объект, управляемый Spring, может реализовать интерфейс Lifecycle. Затем, когда сам ApplicationContext получает сигналы запуска и остановки (например, для сценария остановки/перезапуска во время выполнения), он связывает эти вызовы со всеми реализациями жизненного цикла, определенными в этом контексте. Это делается путем делегирования LifecycleProcessor, как показано в следующем листинге: Java public interface LifecycleProcessor extends Lifecycle { void onRefresh(); void onClose(); } Kotlin interface LifecycleProcessor : Lifecycle { fun onRefresh() fun onClose() ...

Spring IoC контейнер: настройка бинов, объединение механизмов жизненного цикла

Изображение
Начиная с Spring 2.5 у вас есть три варианта управления поведением жизненного цикла бина: Интерфейсы обратного вызова InitializingBean и DisposableBean Пользовательские методы init() и destroy() Аннотации @PostConstruct и @PreDestroy. Вы можете комбинировать эти механизмы для управления данным бином. Если для bean-компонента настроено несколько механизмов жизненного цикла, и каждый механизм настроен с различным именем метода, то каждый настроенный метод выполняется в порядке, указанном ниже. Однако если одно и то же имя метода настроено - например, init() для метода инициализации - для более чем одного из этих механизмов жизненного цикла, этот метод выполняется один раз. Несколько механизмов жизненного цикла, настроенных для одного и того же bean-компонента с различными методами инициализации, называются следующим образом: Методы, аннотированные @PostConstruct afterPropertiesSet() как определено интерфейсом обратного вызова InitializingBean Настраиваемый метод init() Метод...

Spring IoC контейнер: настройка бинов, методы инициализации и уничтожения по умолчанию

Изображение
Когда вы пишете методы обратных вызовов инициализации и уничтожения, которые не используют специфичные для Spring интерфейсы обратного вызова InitializingBean и DisposableBean, вы обычно пишете методы с именами, такими как init(), initialize(), dispose() и так далее. В идеале имена таких методов обратного вызова жизненного цикла стандартизируются по всему проекту, чтобы все разработчики использовали одинаковые имена методов и обеспечивали согласованность. Вы можете настроить контейнер Spring на "поиск" именованных методов обратного вызова инициализации и уничтожения на каждом бине. Это означает, что вы, как разработчик приложения, можете написать свои классы приложения и использовать обратный вызов инициализации, называемый init(), без необходимости настраивать атрибут init-method="init" для каждого определения компонента. Контейнер Spring IoC вызывает этот метод при создании компонента (и в соответствии со стандартным контрактом обратного вызова жизненного цикла, ...