Главная

Java

Spring


Spring Bean :

Spring Bean – это, по сути , обьект, управляемый Spring .
Более конкретно , это обьект , который создается, настраевается и иным образом управляется контейнером Spring Framework.
Spring контейнер может управлять любыми обьектами (POJO, JavaBean, EJB).

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

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

в IoC-контейнере храняться только синглтоны !!!
Так как prototype Bean не хранится в IoC-контейнере , для него не сработает @PreDestroy метод !!!

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

  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


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