Spring - Как я могу уничтожить мой прототип beans?

У меня есть singleton bean, у которого есть метод, который создает экземпляры прототипа bean. Я использую метод описанный здесь, чтобы получить экземпляры прототипа bean.

public class SingletonService implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public void go() {

        MyPrototypeBean prototype = applicationContext
            .getBean(MyPrototypeBean.class);

        prototype.doSomething();
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
        throws BeansException {

        this.applicationContext = applicationContext;
    }
}

Сначала я подумал, что это было достаточно хорошо, что мой экземпляр 'prototype' вышел бы из области действия, когда возвращался метод "go", что означает, что экземпляр не будет ссылаться и будет собираться мусор.

Однако один из сверстников указал на следующее выражение документации:

Клиентский код должен очищать объекты с прототипом и выпускать дорогостоящие ресурсы, которые поддерживает прототип bean (s).

Итак, похоже, что Spring сохранит ссылку, и поэтому gc никогда не подберет ее? Если это так, как я могу сообщить Spring о выпуске ссылки? В документации упоминается, что я могу использовать "пользовательский bean постпроцессор", но неясно, куда будет вписываться этот процессор и какой код он будет работать.

Спасибо всем за помощь, Рой

Ответы

Ответ 1

Я думаю, вы неправильно понимаете документацию. Просто говоря Spring не будет управлять жизненным циклом прототипа bean, поэтому методы @PreDestroy (и т.д.) Должны быть вызваны вашим собственным кодом. Spring не сохранит ссылку.