Я новичок в Spring framework. Я был смущен концепцией синглтон весной и сбор мусора. Я прочитал много вопросов и статей, чтобы получить ответ на мой вопрос, что , как область Spring Singleton собирает мусор. Я получил ответы только на сбор мусора для прототипа, но статьи, касающиеся Singleton scope, мне не поняли. Может ли кто-нибудь дать подробности по этому вопросу.Как Spring Singleton Scope - сбор мусора?
ответ
Весной большинство классов, которые вы пишете, будут Singletons. Это означает, что существует только один экземпляр этих классов. Эти классы создаются при запуске контейнера Spring и уничтожаются, когда контейнер Spring останавливается.
Причина, по которой объекты Spring Singleton отличаются от простых объектов Java, заключается в том, что контейнер поддерживает ссылку на них, и они могут использоваться в любом месте вашего кода в любое время.
Я приведу пример с использованием контейнера Spring, чтобы проиллюстрировать, что я имею в виду. Это NOT, как вы должны это делать обычно при написании приложения Spring, это просто пример.
@Component
public class ExampleClass implements ApplicationContextAware {
/*
* The ApplicationContextAware interface is a special interface that allows
* a class to hook into Spring's Application Context. It should not be used all
* over the place, because Spring provides better ways to get at your beans
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
MyBean bean = applicationContext.getBean("MyBean");
}
}
Что делает приведенный выше код сказать Весна «Я хочу, чтобы экземпляр MyBean, что вы обнаружили, когда контейнер начал» (Classpath Scanning). Spring должен иметь (прокси) экземпляр этого класса, уже созданного и доступного для вашего использования.
Весна IoC контейнера создает ровно один экземпляр объекта, определяемый это определение компоненты. Этот единственный экземпляр хранится в кеше таких одноэлементных компонентов, и все последующие запросы и ссылки для этого имени bean возвращают кешированный объект.
Поскольку этот компонент был кэширован внутри контекста приложения, он никогда не имеет права на сбор мусора, пока контекст приложения не будет уничтожен.
Благодарим @James за такой подробный ответ и URL-адрес документации. – Anant666
Что такое GC? –
Я знаю о одиночных играх в ядре Java, но у меня нет знаний о внутренней работе Spring. Поэтому я хочу знать, что как объекты Spring Spring с областью видимости - это мусор, собранный – Anant666
, независимо от того, доступен ли класс для GC или нет, его содержимое - другое дело. –