Этот вопрос проверяет понимание жизненного цикла бинов в Spring и умение выполнять действия при их уничтожении, что важно для корректного освобождения ресурсов.
В Spring Framework управление жизненным циклом бинов — ключевая особенность IoC-контейнера. Выполнение кода при уничтожении бина необходимо для корректного завершения работы: закрытия соединений с базой данных, освобождения сетевых сокетов, остановки фоновых потоков или сохранения состояния. Spring предоставляет несколько стандартных механизмов для этого.
destroy(). Spring автоматически вызовет его при уничтожении бина. Однако этот подход связывает ваш класс напрямую с Spring API, что считается менее гибким.destroy-method у элемента <bean>. В Java Config (аннотация @Bean) можно указать свойство destroyMethod.Пример с аннотацией @PreDestroy:
import javax.annotation.PreDestroy;
@Component
public class DatabaseConnectionPool {
public void connect() {
// Инициализация пула соединений
}
@PreDestroy
public void cleanup() {
// Закрытие всех соединений, освобождение ресурсов
System.out.println("Closing all database connections...");
}
}Пример с интерфейсом DisposableBean:
import org.springframework.beans.factory.DisposableBean;
@Component
public class NetworkService implements DisposableBean {
@Override
public void destroy() throws Exception {
// Остановка сетевого сервиса
System.out.println("Network service is shutting down...");
}
}Пример конфигурации с @Bean и указанием метода:
@Configuration
public class AppConfig {
@Bean(destroyMethod = "close")
public SomeResource someResource() {
return new SomeResource();
}
}
// Класс SomeResource имеет метод close()
class SomeResource {
public void close() {
// Логика очистки
}
}Вывод: Используйте аннотацию @PreDestroy для стандартного и чистого подхода в большинстве случаев. Интерфейс DisposableBean или явное указание метода в конфигурации полезны, когда вы не можете модифицировать исходный класс или нуждаетесь в более тонком контроле из конфигурации. Это гарантирует, что ваше приложение корректно освобождает ресурсы при завершении работы.