2016-06-03 3 views
6

Я новичок в Spring framework. Я был смущен концепцией синглтон весной и сбор мусора. Я прочитал много вопросов и статей, чтобы получить ответ на мой вопрос, что , как область Spring Singleton собирает мусор. Я получил ответы только на сбор мусора для прототипа, но статьи, касающиеся Singleton scope, мне не поняли. Может ли кто-нибудь дать подробности по этому вопросу.Как Spring Singleton Scope - сбор мусора?

+1

Что такое GC? –

+0

Я знаю о одиночных играх в ядре Java, но у меня нет знаний о внутренней работе Spring. Поэтому я хочу знать, что как объекты Spring Spring с областью видимости - это мусор, собранный – Anant666

+0

, независимо от того, доступен ли класс для GC или нет, его содержимое - другое дело. –

ответ

6

Весной большинство классов, которые вы пишете, будут 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 должен иметь (прокси) экземпляр этого класса, уже созданного и доступного для вашего использования.

От Spring Documentation

Весна IoC контейнера создает ровно один экземпляр объекта, определяемый это определение компоненты. Этот единственный экземпляр хранится в кеше таких одноэлементных компонентов, и все последующие запросы и ссылки для этого имени bean возвращают кешированный объект.

Поскольку этот компонент был кэширован внутри контекста приложения, он никогда не имеет права на сбор мусора, пока контекст приложения не будет уничтожен.

+0

Благодарим @James за такой подробный ответ и URL-адрес документации. – Anant666