Что такое BeanPostProcessor в Java Spring Boot?
Это интерфейс, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring-контейнере.
Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
1.
Вызывается до инициализации бина (до вызова метода с
2.
Вызывается после инициализации бина (после того, как все методы инициализации завершились).
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до того, как они будут переданы клиентскому коду.
Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций)
- Валидация или изменение свойств бина
- Логирование жизненного цикла
- Добавление кастомных аннотаций
- Обработка marker-интерфейсов
Как это работает?
1. Spring сканирует контекст на наличие бинов, которые реализуют интерфейс
2. Если такие бины найдены, они применяются ко всем бинам в приложении.
3. Методы
👉 Java Portal
Это интерфейс, который позволяет вмешиваться в процесс создания и инициализации бинов в Spring-контейнере.
Он предоставляет два основных метода, которые вызываются на разных этапах жизненного цикла бина:
1.
postProcessBeforeInitialization(Object bean, String beanName)Вызывается до инициализации бина (до вызова метода с
@PostConstruct или InitializingBean#afterPropertiesSet).2.
postProcessAfterInitialization(Object bean, String beanName)Вызывается после инициализации бина (после того, как все методы инициализации завершились).
Зачем нужен BeanPostProcessor?
Он используется для дополнительной обработки и кастомизации бинов после их создания, но до того, как они будут переданы клиентскому коду.
Примеры:
- Добавление проксирования бинов (например, для AOP или транзакций)
- Валидация или изменение свойств бина
- Логирование жизненного цикла
- Добавление кастомных аннотаций
- Обработка marker-интерфейсов
Как это работает?
1. Spring сканирует контекст на наличие бинов, которые реализуют интерфейс
BeanPostProcessor.2. Если такие бины найдены, они применяются ко всем бинам в приложении.
3. Методы
postProcessBeforeInitialization и postProcessAfterInitialization вызываются для каждого бина, который создаёт Spring.Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
Java-совет: начиная с Java 9 можно использовать
👉 Java Portal
Stream.takeWhile() для удобной "нарезки" списков через стримы.List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
✗ Вместо:
List<Integer> result = new ArrayList<>();
for (Integer n : numbers) {
if (n < 5) {
result.add(n);
} else {
break;
}
}
System.out.println(result); // [1, 2, 3, 4]
✓ Можно так:
result = numbers.stream().takeWhile(n -> n < 5).toList();
System.out.println(result); // [1, 2, 3, 4]
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
9 000₽ за вечер. Без кода. Без офиса. Без опыта.
Именно столько платят за одного чат-бота для бизнеса начинающим спецам.
Берёшь шаблон → собираешь бота → сдаёшь клиенту. Первые деньги — в первую же неделю.
Показываю, как новичку делать чат-ботов для бизнеса за дорого:
👉 @other_digital_bot
Именно столько платят за одного чат-бота для бизнеса начинающим спецам.
Берёшь шаблон → собираешь бота → сдаёшь клиенту. Первые деньги — в первую же неделю.
Показываю, как новичку делать чат-ботов для бизнеса за дорого:
👉 @other_digital_bot
❤2😁2
Я побывал по обе стороны собеседований по system design.
Ниже темы, которые нужно изучить, чтобы действительно хорошо в этом разбираться:
1. [Сервер]
2. [Задержка и пропускная способность]
3. [Масштабирование и его виды]
– Вертикальное и горизонтальное масштабирование
4. [Автомасштабирование]
5. [Прикидочные расчеты]
6. [Теорема CAP]
7. [Масштабирование базы данных]
– Индексы
– Партиционирование
– Архитектура master-slave
– Multi-master
– Шардирование базы данных
– Недостатки шардирования
8. [SQL и NoSQL базы данных и когда что использовать]
9. [База данных]
– SQL-база данных
– NoSQL-база данных
– Масштабирование в NoSQL и SQL
– Когда какую базу использовать?
10. [Микросервисы]
– Монолит vs микросервисы
– Зачем вообще разбивать приложение на микросервисы?
– Когда использовать микросервисы?
– Как клиенты делают запросы в микросервисной архитектуре?
11. [Глубокое погружение в load balancer]
– Зачем нужен load balancer?
– Алгоритмы load balancing
12. [Кеширование]
– Плюсы кеширования
– Типы кешей
– Redis
13. [Blob Storage]
– Что такое blob и зачем нужно blob storage?
– AWS S3
14. [CDN, Content Delivery Network]
– Как работает CDN?
15. [Message Broker]
– Асинхронное программирование
– Зачем ставить message broker между сервисами?
– Очередь сообщений
– Поток сообщений
– Когда использовать message broker
16. [Глубокое погружение в Apache Kafka]
– Когда использовать Kafka
– Внутреннее устройство Kafka
17. [Pub/sub в реальном времени]
18. [Event-Driven Architecture]
– Зачем использовать EDA?
– Простое уведомление о событии
– Передача состояния через событие
19. [Распределенные системы]
20. [Самовосстанавливающаяся система с election лидера]
21. [Глубокое погружение в consistency]
– Строгая согласованность
– Когда выбирать strong consistency
– Eventual consistency
– Когда выбирать eventual consistency
– Способы добиться strong consistency
– Способы добиться eventual consistency
22. [Consistent hashing]
23. [Избыточность данных и восстановление данных]
– Зачем делать базы данных избыточными?
– Разные способы резервного копирования
– Непрерывная избыточность
24. [Прокси]
– Forward proxy vs reverse proxy
👉 Java Portal
Ниже темы, которые нужно изучить, чтобы действительно хорошо в этом разбираться:
1. [Сервер]
2. [Задержка и пропускная способность]
3. [Масштабирование и его виды]
– Вертикальное и горизонтальное масштабирование
4. [Автомасштабирование]
5. [Прикидочные расчеты]
6. [Теорема CAP]
7. [Масштабирование базы данных]
– Индексы
– Партиционирование
– Архитектура master-slave
– Multi-master
– Шардирование базы данных
– Недостатки шардирования
8. [SQL и NoSQL базы данных и когда что использовать]
9. [База данных]
– SQL-база данных
– NoSQL-база данных
– Масштабирование в NoSQL и SQL
– Когда какую базу использовать?
10. [Микросервисы]
– Монолит vs микросервисы
– Зачем вообще разбивать приложение на микросервисы?
– Когда использовать микросервисы?
– Как клиенты делают запросы в микросервисной архитектуре?
11. [Глубокое погружение в load balancer]
– Зачем нужен load balancer?
– Алгоритмы load balancing
12. [Кеширование]
– Плюсы кеширования
– Типы кешей
– Redis
13. [Blob Storage]
– Что такое blob и зачем нужно blob storage?
– AWS S3
14. [CDN, Content Delivery Network]
– Как работает CDN?
15. [Message Broker]
– Асинхронное программирование
– Зачем ставить message broker между сервисами?
– Очередь сообщений
– Поток сообщений
– Когда использовать message broker
16. [Глубокое погружение в Apache Kafka]
– Когда использовать Kafka
– Внутреннее устройство Kafka
17. [Pub/sub в реальном времени]
18. [Event-Driven Architecture]
– Зачем использовать EDA?
– Простое уведомление о событии
– Передача состояния через событие
19. [Распределенные системы]
20. [Самовосстанавливающаяся система с election лидера]
21. [Глубокое погружение в consistency]
– Строгая согласованность
– Когда выбирать strong consistency
– Eventual consistency
– Когда выбирать eventual consistency
– Способы добиться strong consistency
– Способы добиться eventual consistency
22. [Consistent hashing]
23. [Избыточность данных и восстановление данных]
– Зачем делать базы данных избыточными?
– Разные способы резервного копирования
– Непрерывная избыточность
24. [Прокси]
– Forward proxy vs reverse proxy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3