У меня есть одноэлементный 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, чтобы он выпустил ссылку? В документации упоминается, что я могу использовать «постпроцессор пользовательского компонента», но неясно, где этот процессор подойдет и какой код он будет запускать.
Заранее благодарим всех за помощь, Рой