Может ли объект, созданный в контейнере IoC, называться Singleton.Если нет - почему? - PullRequest
4 голосов
/ 30 августа 2010

может ли объект, созданный в контейнере IOC, называться Singleton, если да, почему, если нет, почему?

Кто-нибудь может объяснить мне в деталях простыми словами, как конкатайн МОК точно управляет объектами ..

Ответы [ 5 ]

6 голосов
/ 30 августа 2010

Можно сказать, что пружинный синглтон не является одиночным.

Синглтон имеет свою значимую область применения, область синглтона пружины - это контейнер ioc пружины. И значимой областью классического синглтона является ClassLoader. Вы можете узнать больше о различии между этими типами синглтона здесь: Пружинный синглтон не является синглтоном .

Spring управляет своим синглтоном в хэш-карте (Singleton Cache). Когда вы получаете bean-компонент из контейнера Spring ioc, он сначала проверяет, существует ли bean-компонент в одноэлементном кэше, если он существует, он возвращает bean-компонент из одноэлементного кэша

1 голос
/ 30 августа 2010

Spring (и другие ioc-контейнеры) предлагают различные области применения.Одна из областей действия - singleton - т. Е. Контейнер создает объект только один раз и дает / вводит только один экземпляр.Синглтон - это область действия по умолчанию, поэтому большинство bean-компонентов действительно являются синглетонами с точки зрения контейнера, т. Е. У них есть только один экземпляр.

Однако существуют и другие области действия, например prototype илиrequest и session.

В , управляющем компонентом, контейнер выполняет следующие действия:

  • вызывает @PostConstruct и@PreDestroy методы (или методы init и destroy, настроенные любыми доступными средствами)
  • внедряет все их определенные зависимости (= устанавливает другие bean-компоненты, существующие в контейнере, в поля этого bean-компонента)
  • создает аспекты AOP вокруг методов bean

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

0 голосов
/ 31 августа 2010

Я использую более общее определение синглтона:

Синглтон - это объект, который гарантированно будет уникальным внутри данного Объем.

Эта область является ClassLoader в традиционном одноэлементном определении, но возможны и другие области:

  • Приложение (может быть кластеризованным, поэтому классический Singleton не поможет)
  • HTTP-сессия
  • Тема (реализовано через ThreadLocals)
  • HTTP-запрос и т. Д.

(мне очень нравится метод Seam Component.getInstance (Class, ScopeType) , который позволяет вам выбрать область, для которой вы хотите синглтон.)

0 голосов
/ 31 августа 2010

Может ли объект, созданный в МОК Контейнер можно назвать Singleton, если да почему, если нет, то почему?

Прочитайте это , из справочника Spring.

Может кто-нибудь объяснить мне подробно в простыми словами, как именно МОК Conatiner управляет объектами ..

Прочитайте это , из справочника Spring.

0 голосов
/ 30 августа 2010

Вы можете найти эту ветку групп Google полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...