Spring IoC контейнер: настройка бинов, обратные вызовы разрушения
Реализация интерфейса org.springframework.beans.factory.DisposableBean позволяет бину получить обратный вызов, когда контейнер, содержащий его, уничтожен. Интерфейс DisposableBean указывает один метод:
Java
void destroy() throws Exception;
Kotlin
fun destroy()
Рекомендуется не использовать интерфейс обратного вызова DisposableBean, поскольку он без необходимости связывает код со Spring. В качестве альтернативы предлагается использовать аннотацию @PreDestroy или указать общий метод, который поддерживается определениями компонентов. С метаданными конфигурации на основе XML вы можете использовать атрибут destroy-method в <bean/>. При Java конфигурации вы можете использовать атрибут destroyMethod @Bean. Рассмотрим следующее определение:
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
Java
public class ExampleBean {
public void cleanup() {
// выполнить некоторую работу по уничтожению
// (например, освобождение соединений из пула)
}
}
Kotlin
class ExampleBean {
fun cleanup() {
// выполнить некоторую работу по уничтожению
// (например, освобождение соединений из пула)
}
}
Предыдущее определение имеет почти такой же эффект, как и следующее определение:
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
Java
public class AnotherExampleBean implements DisposableBean {
@Override
public void destroy() {
// выполнить некоторую работу по уничтожению
// (например, освобождение соединений из пула)
}
}
Kotlin
class AnotherExampleBean : DisposableBean {
override fun destroy() {
// выполнить некоторую работу по уничтожению
// (например, освобождение соединений из пула)
}
}
Однако первое из двух предыдущих определений не связывает код со Spring.
Вы можете присвоить атрибуту destroy-method элемента <bean> специальное (inferred)
значение, которое инструктирует Spring автоматически обнаруживать открытый метод закрытия или завершения работы для определенного класса bean-компонента. (Любой класс, который реализует java.lang.AutoCloseable или java.io.Closeable, следовательно, будет соответствовать.) Вы также можете установить это специальное (inferred)
значение в атрибуте default-destroy-method элемента <beans>, чтобы применить это поведение к весь набор компонентов. Обратите внимание, что это поведение по умолчанию для конфигурации Java.
Читайте также:
- Spring IoC контейнер: настройка бинов, обратные вызовы жизненного цикла
- Spring IoC контейнер: настройка бинов, обратные вызовы инициализации
- Spring IoC контейнер: области применения бинов, прототип (prototype)
Комментарии
Отправить комментарий