Spring: Как очистить прототип beans?

В соответствии с документацией Spring, когда объект bean указан как "prototype" Spring, не управляет полным жизненным циклом его объектов. Более конкретно, обратные вызовы жизненного цикла разрушения не вызываются. Клиентский код должен выполнить необходимые очистки. Документация Spring также предлагает использовать для этой цели пользовательский bean постпроцессор. Но интерфейс "BeanPostProcessor" включает только методы обратного вызова до и после инициализации beans. Существует не метод обратного вызова дескрипции. Затем, где и как выпустить ресурсы, полученные с помощью прототипа beans?

Ответ 1

Что вы ищете - это DestructionAwareBeanPostProcessor, это под-интерфейс BeanPostProcessor.

Вы можете создать новую реализацию этого интерфейса самостоятельно или использовать один из его классов реализации, например CommonAnnotationBeanProcessor.

Ответ 2

Единственный чистый способ прекратить использование bean с прототипом - это явно вызвать некоторые из его "уничтожающих" -методов для утилизации ресурсов. Вы также можете использовать Phantom Ссылки. Здесь больше информации о различных типах ссылок.