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.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки