Аннотация @PreDestroy используется в Spring для вызова метода перед тем, как бин будет уничтожен. Это позволяет выполнить необходимые операции по очистке ресурсов, закрытию соединений и т.д. перед завершением работы бина.
Особенности использования:
@PreDestroy, не должен принимать аргументов.void или любой другой тип (возвращаемое значение игнорируется).@PreDestroy, порядок их выполнения не гарантируется.@PreDestroy-методе, могут привести к тому, что контейнер Spring не сможет корректно завершить работу или уничтожить другие бины.Альтернативы @PreDestroy:
DisposableBean и переопределение метода destroy().destroy-method в XML-конфигурации Spring или @Bean аннотации с атрибутом destroyMethod.Пример использования:
java
java
| Механизм | Где используется? | Преимущества | Недостатки |
|---|---|---|---|
@PreDestroy | Аннотации (Java Config) | Чистый код, хорошо читается, стандарт JSR-250 | Меньший контроль над порядком выполнения |
DisposableBean | Программно (implement interface) | Прозрачное, явное определение | Менее читабельно для многих методов |
destroy-method | XML | Гибкость в настройке | Разделение конфигурации и логики, устаревает |
@Bean(destroyMethod) | Аннотации (Java Config) | Сочетание аннотаций и явного указания | Может быть многословным для нескольких бинов |
@PreDestroy предпочтительнее в большинстве современных Spring-приложений, основанных на Java-конфигурации, так как он является стандартным JSR-250 способом указания callback-методов жизненного цикла.