Spring - Как я могу уничтожить мои 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-компонента.

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

Заранее благодарим всех за помощь, Рой

15
задан Roy Truelove 23 December 2011 в 17:05
поделиться