Spring IoC контейнер: обзор Bean

Контейнер Spring IoC управляет одним или несколькими компонентами (beans). Эти компоненты создаются с помощью метаданных конфигурации, которые вы предоставляете контейнеру (например, в форме определений XML <bean/>).

В самом контейнере эти определения bean-компонентов представлены в виде объектов BeanDefinition, которые содержат (среди прочего) следующие метаданные:

  • Имя класса с указанием пакета: обычно это фактический класс реализации определяемого компонента.
  • Элементы поведенческой конфигурации бина, которые определяют, как бин должен вести себя в контейнере (область действия, обратные вызовы жизненного цикла и т. д.).
  • Ссылки на другие bean-компоненты, которые необходимы для его работы. Эти ссылки также называются соавторами (collaborators) или зависимостями (dependencies).
  • Другие параметры конфигурации, устанавливаемые во вновь созданном объекте - например, ограничение размера пула или количество соединений, используемых в бине, который управляет пулом соединений.

Эти метаданные преобразуются в набор свойств, которые составляют каждое определение компонента.

  • Class - класс
  • Name - имя
  • Scope - область применения
  • Аргументы конструктора
  • Свойства
  • Режим автопривязки
  • Режим ленивой инициализации
  • Метод инициализации
  • Метод разрушения

В дополнение к определениям бинов, которые содержат информацию о том, как создать конкретный бин, реализации ApplicationContext также позволяют регистрировать существующие объекты, которые создаются вне контейнера (пользователями). Это делается путем обращения к BeanFactory ApplicationContext через метод getBeanFactory(), который возвращает реализацию BeanFactory DefaultListableBeanFactory. DefaultListableBeanFactory поддерживает эту регистрацию с помощью методов registerSingleton(..) и registerBeanDefinition(..). Однако типичные приложения работают только с компонентами, определенными с помощью метаданных определения стандартных компонентов.

Метаданные компонента и предоставленные вручную экземпляры-синглтоны должны быть зарегистрированы как можно раньше, чтобы контейнер мог правильно рассуждать о них во время автоматической привязки (autowiring) и других этапов самоанализа. Хотя переопределение существующих метаданных и существующих синглтон экземпляров поддерживается в некоторой степени, регистрация новых bean-компонентов во время выполнения (одновременно с прямым доступом к фабрике) официально не поддерживается и может привести к исключениям одновременного доступа, несовместимому состоянию в контейнере bean-компонентов или обоим этим исключениям.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки