1.38M
Категория: ПрограммированиеПрограммирование

Жизненный цикл бина

1.

Жизненный цикл бина
Шипицын Владимир

2.

Схема жизненного цикла бина

3.

Загрузка Bean Definitions
Создание Bean Definition происходит в результате парсирования файла
конфигурации
После выхода четвертой версии спринга, у нас появилось четыре способа
конфигурирования контекста:
1. Xml конфигурация — ClassPathXmlApplicationContext(“context.xml”), парсирование
происходит с помощью XmlBeanDefinitionReader
2. Конфигурация через аннотации с указанием пакета для сканирования —
3.
4.
AnnotationConfigApplicationContext(“package.name”)
Конфигурация через аннотации с указанием класса (или массива классов) помеченного
аннотацией @Configuration -AnnotationConfigApplicationContext(JavaConfig.class). Этот
способ конфигурации называется — JavaConfig.
■ Второй и трейтий способы конфигурации используют для парсирования
AnnotatedBeanDefinitionReader и ClassPathBeanDefinitionScanner
Groovy конфигурация — GenericGroovyApplicationContext(“context.groovy”), использует для
парсирования GroovyBeanDefinitionReader

4.

Bean Definitions
● BeanDefinition – это объект, который хранит в себе информацию о
бине. Сюда входит: из какого класса его (бин) надо создать; scope;
установлена ли ленивая инициализация; нужно ли перед данным
бином инициализировать другой и иные проперти
● Все полученные BeanDefinition складываются в HashMap, в которой
идентификатором является имя бина (установленное вами или
присвоенное спрингом) и сам BeanDefinition объект.

5.

Bean Factory Post Processor
● BeanFactoryPostProcessor работает с конфигурационными
метаданными бина. То есть BeanFactoryPostProcessor считывает
конфигурационные метаданные и изменяет их до того, как контейнер
создаст экземпляры каких-либо бинов.
● Spring содержит ряд предопределенных постпроцессоров фабрики
бинов, такие
как PropertyOverrideConfigurer и PropertySourcesPlaceholderConfigurer.

6.

Bean Factory
● Первым делом Bean Factory создает Bean Post Processor и складывает
их вне IoC контейнера
● После BeanFactory итерируется по HashMap с BeanDefinition, создает
на их основе бины и складывает в IoC контейнер.
● Важно отметить что, при старте приложения, в IoC контейнер попадут
бины, которые имеют scope Singleton, остальные же создаются, тогда
когда они нужны (prototype, request, session)

7.

Bean Post Processor
● Bean Post Processor – это инфраструктурный бин, который хранится
вне IoC контейнера и необходим для поддержания функционала
нашего спринг приложения, а не обеспечения работы бизнес логики
● Содержит в себе два метода: postProcessorBeforeInitialization() и
postProcessorAfterInitialization()

8.

postProcessorBeforeInitialization()
● Этот метод позволяет разработчикам выполнять дополнительные
действия или модификации бина до того, как будет вызвана его
инициализация.
● Назначение метода postProcessBeforeInitialization():
1. Обработки аннотаций, таких как @Autowired, @PostConstruct и др.
2. Настройки значений полей или выполнения какой-либо другой логики начального
конфигурирования бина.

9.

Initialization callbacks
● Initialization callbacks (инициализационные обратные вызовы) — это специальные
методы жизненного цикла, которые Spring вызывает после создания бина и
внедрения всех зависимостей, но перед тем как бин будет помещен в контекст
приложения.
● Эти обратные вызовы дают возможность выполнять любую необходимую
инициализацию ресурсов или логику настройки. В Spring есть несколько способов
определить такие обратные вызовы:
1. Аннотация @PostConstruct
2. Реализация интерфейса InitializingBean
3. XML конфигурация или аннотация @Bean с атрибутом initMethod
● Использование этих callback-методов полезно для различных задач инициализации,
таких как установка соединений с базой данных, чтение файлов конфигурации,
заполнение кэша данными и т.д.

10.

postProcessorAfterInitialization()
● Этот метод вызывается после завершения всех процессов
инициализации бина. Он часто используется для:
1. Создания прокси объектов с целью добавления дополнительного поведения к
существующим методам бина.
2. Внедрения аспектов (например, транзакционного управления).

11.

Destruction callbacks
● Destruction callbacks — это методы, которые вызываются непосредственно перед
тем, как Spring контейнер уничтожает экземпляр бина, обычно при завершении
приложения или при уничтожении определенного контекста. Эти методы позволяют
выполнять любую необходимую очистку ресурсов, например закрытие соединений с
базой данных или остановку потоков.
● Способы определения destruction callbacks в Spring:
1.
2.
3.
Аннотация @PreDestroy
Реализация интерфейса DisposableBean
XML конфигурация или аннотация @Bean с атрибутом destroyMethod
● Destruction callbacks особенно полезны для управления жизненным циклом
ресурсоёмких объектов и предотвращения утечек памяти и других ресурсов.
Например, если ваш бин отвечает за поддержание соединения с сервером или
открытым файлом, вы можете использовать destruction callback для того, чтобы
закрыть это соединение или файл, когда бин больше не нужен. Для вызова
destruction callbacks при использовании бинов с prototype scope требуются
дополнительные настройки, поскольку Spring не управляет полным жизненным
циклом этих объектов после их создания.

12.

Вопросы к спикеру

13.

Источники
https://habr.com/ru/articles/222579/
● https://javarush.com/quests/lectures/questsp
ring.level01.lecture26
● https://javarush.com/groups/posts/1676spring-framework-vvedenie
● https://www.youtube.com/watch?v=BmBr5di
z8WA
● https://youtu.be/cou_qomYLNU?si=Cq0j1ltH
uHBw38dV
English     Русский Правила