Главная

Java

Spring


Bean :

Бины – это объекты , которые управляются Spring IoC контейнером .
Эти объекты создаются с помощью : POJO(Plain Old Java Object) + конфигурационных метаданных .

Для того чтобы наша конфигурация была понята Spring’ом существует XmlBeanDefinitionReader. Это внутренний компонент Spring’a, который сканирует (парсит) xml и на основе того, что мы там написали создает BeanDefinition’ы. BeanDefinition – это объект, который хранит в себе информацию о бине. Сюда входит: из какого класса его (бин) надо создать; scope; установлена ли ленивая инициализация; нужно ли перед данным бином инициализировать другой и иные проперти, которые описаны в xml. Все полученные BeanDefinition’ы складываются в HashMap, в которой идентификатором является имя бина (установленное вами или присвоенное спрингом) и сам BeanDefinition объект.

После того, как все BeanDefinition’ы созданы на сцену выходит новый герой – BeanFactory. Этот объект итерируется по HashMap’e с BeanDefinition’ами, создает на их основе бины и складывает в IoC контейнер. Здесь есть нюанс, на самом деле, при старте приложения, в IoC контейнер попадут бины, которые имеют scope Singleton (устанавливается по-умолчанию), остальные же создаются, тогда когда они нужны (prototype, request, session).

требования к Bean:

  • Класс должен иметь конструктор без параметров, с модификатором доступа public
  • Все поля класса должны иметь модификатор private и свойства класса должны быть доступны через get, set
  • Класс должен быть сериализуем. implements java.io.Serializable . (не обязательно)

алгоритм инициализации контекста:

  1. XmlBeanDefinitionReader сканирует наш xml-конфигурационный файл.
  2. Создает BeanDefinition’ы и кладет их в HashMap.
  3. Приходит BeanFactory и из этой HashMap отдельно складывает все BeanPostProcessor’ы.
  4. Создает из BeanDefinition’ов бины и кладет их в IoC-контейнер.
  5. Тут приходят BPP и настраивают эти бины с помощью 2х методов. (postProcessorBeforeInitialization , postProcessorAfterInitialization)

Свойства Bean:

  • class - Этот атрибут является обязательным и указывает конкретный класс Java-приложения, который будет использоваться для создания бина.
  • id или name - "id" Уникальный идентификатор бина. “name” как алиас , может содержать одновременно множество имен.
  • scope - Это свойство определяет область видимости создаваемых объектов. (singleton , prototype , request )
  • constructor-arg - Определяет конструктор, использующийся для внедрения зависимости.
  • properties - Определяет свойства внедрения зависимости.
  • initialization method - Здесь определяется метод инициализации бина
  • destruction method - Метод уничтожения бина, который будет использоваться при уничтожении контейнера, содержащего бин.
  • autowiring mode - Определяет режим автоматического связывания при внедрении зависимости.
  • lazy-initialization mode - Режим ленивой инициализации даёт контейнеру IoC команду создавать экземпляр бина при первом запросе, а не при запуске приложения.

типы Bean:

  • Entity Bean
  • Session Bean (stateless , stateful , singleton)
  • Message Driven Beans


Полезные ссылки.